最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)后臺(tái)開(kāi)啟服務(wù)默默拍照功能

 更新時(shí)間:2018年06月10日 11:55:40   作者:Snowball  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)后臺(tái)開(kāi)啟服務(wù)默默拍照功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android后臺(tái)開(kāi)啟服務(wù)默默拍照的具體代碼,供大家參考,具體內(nèi)容如下

最近項(xiàng)目原因,需要編寫(xiě)一后臺(tái)運(yùn)行的程序,在給定時(shí)間間隔下進(jìn)行拍照,關(guān)鍵技術(shù)主要是:1、開(kāi)啟服務(wù);2、在不不預(yù)覽的情況下,進(jìn)行拍照操作。3、使用AlarmManager進(jìn)行定時(shí)操作。

資源清單如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
 package="com.yang.testservice" 
 android:versionCode="1" 
 android:versionName="1.0" > 
 
 <uses-feature android:name="android.hardware.camera" /> 
 <uses-feature android:name="android.hardware.camera.autofocus" /> 
 
 <uses-permission android:name="android.permission.CAMERA" /> 
 <uses-permission android:name="android.permission.FLASHLIGHT" /> 
 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
 
 <uses-feature android:name="android.hardware.camera.any" /> 
 
 <uses-sdk 
  android:minSdkVersion="13" 
  android:targetSdkVersion="15" /> 
 
 <application 
  android:icon="@drawable/ic_launcher" 
  android:label="@string/app_name" 
  android:theme="@style/AppTheme" > 
  <activity 
   android:name=".MainActivity" 
   android:label="@string/title_activity_main" > 
   <intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
 
    <category android:name="android.intent.category.LAUNCHER" /> 
   </intent-filter> 
  </activity> 
 
  <service android:name="com.yang.service.LocalService" /> 
 </application> 
 
</manifest> 

服務(wù)代碼如下:

package com.yang.service; 
 
import java.io.IOException; 
 
import android.app.AlarmManager; 
import android.app.Notification; 
import android.app.NotificationManager; 
import android.app.PendingIntent; 
import android.app.Service; 
import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentFilter; 
import android.hardware.Camera; 
import android.os.Binder; 
import android.os.IBinder; 
import android.util.Log; 
import android.view.SurfaceView; 
import android.widget.Toast; 
 
import com.yang.handle.PhotoHandler; 
import com.yang.testservice.MainActivity; 
import com.yang.testservice.R; 
 
public class LocalService extends Service { 
 
 private AlarmManager am = null; 
 private Camera camera; 
 
 private final IBinder mBinder = new LocalBinder(); 
 
 private NotificationManager mNM; 
 
 private int NOTIFICATION = R.string.local_service_started; 
 
 /** 
  * Class for clients to access. Because we know this service always runs in 
  * the same process as its clients, we don't need to deal with IPC. 
  */ 
 public class LocalBinder extends Binder { 
  public LocalService getService() { 
   return LocalService.this; 
  } 
 
 } 
 
 @Override 
 public void onCreate() { 
  mNM = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); 
  showNotification(); 
  init(); 
 } 
 
 private void init() { 
  am = (AlarmManager) getSystemService(ALARM_SERVICE); 
 
  camera = openFacingBackCamera(); 
 
  // 注冊(cè)廣播 
  IntentFilter filter = new IntentFilter(); 
  filter.addAction("com.vegetables_source.alarm"); 
  registerReceiver(alarmReceiver, filter); 
 
  Intent intent = new Intent(); 
  intent.setAction("com.vegetables_source.alarm"); 
  PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); 
 
  am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 
    1000 * 10, pi);// 馬上開(kāi)始,每1分鐘觸發(fā)一次 
 } 
 
 @Override 
 public int onStartCommand(Intent intent, int flags, int startId) { 
  Log.i("LocalService", "Received start id " + startId + ": " + intent); 
 
  return START_STICKY; 
 } 
 
 @Override 
 public void onDestroy() { 
  mNM.cancel(NOTIFICATION); 
 
  cancelAlertManager(); 
 
  if (camera != null) { 
   camera.release(); 
   camera = null; 
  } 
 
  Toast.makeText(this, R.string.local_service_stopped, Toast.LENGTH_SHORT) 
    .show(); 
 } 
 
 @Override 
 public IBinder onBind(Intent intent) { 
  return mBinder; 
 } 
 
 /** 
  * Show a notification while this service is running. 
  */ 
 private void showNotification() { 
  CharSequence text = getText(R.string.local_service_started); 
 
  Notification notification = new Notification(R.drawable.stat_running, 
    text, System.currentTimeMillis()); 
 
  PendingIntent contentIntent = PendingIntent.getActivity(this, 0, 
    new Intent(this, MainActivity.class), 0); 
 
  notification.setLatestEventInfo(this, 
    getText(R.string.local_service_label), text, contentIntent); 
 
  mNM.notify(NOTIFICATION, notification); 
 } 
 
 private void cancelAlertManager() { 
  Intent intent = new Intent(); 
  intent.setAction("com.vegetables_source.alarm"); 
  PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0); 
  am.cancel(pi); 
 
  // 注銷(xiāo)廣播 
  unregisterReceiver(alarmReceiver); 
 } 
 
 BroadcastReceiver alarmReceiver = new BroadcastReceiver() { 
 
  @Override 
  public void onReceive(Context context, Intent intent) { 
   if ("com.vegetables_source.alarm".equals(intent.getAction())) { 
 
    if (camera != null) { 
     SurfaceView dummy = new SurfaceView(getBaseContext()); 
     try { 
      camera.setPreviewDisplay(dummy.getHolder()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
     camera.startPreview(); 
 
     camera.takePicture(null, null, new PhotoHandler( 
       getApplicationContext())); 
    } 
 
   } 
 
  } 
 }; 
 
 private Camera openFacingBackCamera() { 
  Camera cam = null; 
  Camera.CameraInfo cameraInfo = new Camera.CameraInfo(); 
  ; 
  for (int camIdx = 0, cameraCount = Camera.getNumberOfCameras(); camIdx < cameraCount; camIdx++) { 
   Camera.getCameraInfo(camIdx, cameraInfo); 
   if (cameraInfo.facing == Camera.CameraInfo.CAMERA_FACING_BACK) { 
    try { 
     cam = Camera.open(camIdx); 
    } catch (RuntimeException e) { 
     e.printStackTrace(); 
    } 
   } 
  } 
 
  return cam; 
 } 
} 

進(jìn)行拍照存儲(chǔ)的操作代碼如下:

package com.yang.handle; 
 
import java.io.File; 
import java.io.FileOutputStream; 
import java.text.SimpleDateFormat; 
import java.util.Date; 
 
import android.content.Context; 
import android.hardware.Camera; 
import android.hardware.Camera.PictureCallback; 
import android.os.Environment; 
import android.widget.Toast; 
 
public class PhotoHandler implements PictureCallback { 
 
 private final Context context; 
 
 public PhotoHandler(Context context) { 
  this.context = context; 
 } 
 
 @Override 
 public void onPictureTaken(byte[] data, Camera camera) { 
 
  File pictureFileDir = getDir(); 
 
  if (!pictureFileDir.exists() && !pictureFileDir.mkdirs()) { 
 
   Toast.makeText(context, "Can't create directory to save image.", 
     Toast.LENGTH_LONG).show(); 
   return; 
 
  } 
 
  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyymmddhhmmss"); 
  String date = dateFormat.format(new Date()); 
  String photoFile = "Picture_" + date + ".jpg"; 
 
  String filename = pictureFileDir.getPath() + File.separator + photoFile; 
 
  File pictureFile = new File(filename); 
  System.out.println("filename is "+ filename); 
 
  try { 
   FileOutputStream fos = new FileOutputStream(pictureFile); 
   fos.write(data); 
   fos.close(); 
   Toast.makeText(context, "New Image saved:" + photoFile, 
     Toast.LENGTH_LONG).show(); 
  } catch (Exception error) { 
   Toast.makeText(context, "Image could not be saved.", 
     Toast.LENGTH_LONG).show(); 
  } 
 } 
 
 private File getDir() { 
  File sdDir = Environment 
   .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES); 
  return new File(sdDir, "ServiceCamera"); 
 } 
} 

項(xiàng)目代碼如下:

Android后臺(tái)開(kāi)啟服務(wù)默默拍照

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解

    Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解

    這篇文章主要為大家介紹了Android性能優(yōu)化之plt?hook與native線程監(jiān)控詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Android自定義動(dòng)畫(huà)根據(jù)控件Y軸旋轉(zhuǎn)動(dòng)畫(huà)(仿紅包)

    Android自定義動(dòng)畫(huà)根據(jù)控件Y軸旋轉(zhuǎn)動(dòng)畫(huà)(仿紅包)

    這篇文章主要介紹了Android自定義動(dòng)畫(huà)根據(jù)控件Y軸旋轉(zhuǎn)動(dòng)畫(huà)(仿紅包),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-06-06
  • Android獲取手機(jī)聯(lián)系人的方法

    Android獲取手機(jī)聯(lián)系人的方法

    這篇文章主要介紹了Android 獲取系統(tǒng)聯(lián)系人信息的實(shí)例的相關(guān)資料,希望通過(guò)本文大家能實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • Android實(shí)現(xiàn)自動(dòng)輪播圖效果

    Android實(shí)現(xiàn)自動(dòng)輪播圖效果

    這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)自動(dòng)輪播圖效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android Studio 3.0的下載安裝教程

    Android Studio 3.0的下載安裝教程

    Android Studio從3.0版本新增了許多功能,當(dāng)然首當(dāng)其沖就是從3.0版本新增了對(duì) Kotlin 開(kāi)發(fā)語(yǔ)言的支持,除此之外還有其他一些新功能,今天我們主要來(lái)看看如何更新Android Studio 3.0
    2017-10-10
  • Android Jetpack組件DataBinding詳解

    Android Jetpack組件DataBinding詳解

    這篇文章主要介紹了Android Jetpack組件DataBinding,DataBinding有很多優(yōu)勢(shì),其中最明顯是代碼更加簡(jiǎn)潔,可讀性會(huì)更高。部分和UI控件有關(guān)的代碼可以在布局文件當(dāng)中完成,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2022-10-10
  • 詳解Android截屏事件監(jiān)聽(tīng)

    詳解Android截屏事件監(jiān)聽(tīng)

    本篇文章主要介紹了Android截屏事件監(jiān)聽(tīng),Android系統(tǒng)沒(méi)有直接對(duì)截屏事件監(jiān)聽(tīng)的接口,本文介紹了2種方法,有興趣的可以了解一下。
    2016-12-12
  • 兩分鐘讓你徹底明白Android Activity生命周期的詳解(圖文介紹)

    兩分鐘讓你徹底明白Android Activity生命周期的詳解(圖文介紹)

    本篇文章是對(duì)Android的生命周期進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • Android編程實(shí)現(xiàn)禁止系統(tǒng)鎖屏與解鎖亮屏的方法

    Android編程實(shí)現(xiàn)禁止系統(tǒng)鎖屏與解鎖亮屏的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)禁止系統(tǒng)鎖屏與解鎖亮屏的方法,實(shí)例分析了Android關(guān)閉屏幕、鎖屏及解鎖屏幕的相關(guān)技巧,需要的朋友可以參考下
    2015-12-12
  • Android實(shí)現(xiàn)動(dòng)態(tài)高斯模糊效果

    Android實(shí)現(xiàn)動(dòng)態(tài)高斯模糊效果

    在Android開(kāi)發(fā)中常常會(huì)用到高斯模糊,但有的時(shí)候我們可能會(huì)需要一個(gè)圖片以不同的模糊程度展現(xiàn)出來(lái),那如何實(shí)現(xiàn)呢,一起通過(guò)本文來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2016-08-08

最新評(píng)論

分宜县| 勐海县| 天峨县| 金溪县| 盘锦市| 凤翔县| 瑞安市| 高雄市| 揭阳市| 高淳县| 伊川县| 抚远县| 兰考县| 仪征市| 房产| 武夷山市| 宜宾市| 平远县| 外汇| 南川市| 祁阳县| 溧水县| 金平| 南郑县| 武义县| 辽阳市| 泽普县| 文登市| 繁峙县| 名山县| 克山县| 江源县| 乌恰县| 秭归县| 西乡县| 财经| 金门县| 西藏| 东源县| 泰兴市| 泾源县|