国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android實現后臺開啟服務默默拍照功能

2019-12-12 00:48:31
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Android后臺開啟服務默默拍照的具體代碼,供大家參考,具體內容如下

最近項目原因,需要編寫一后臺運行的程序,在給定時間間隔下進行拍照,關鍵技術主要是:1、開啟服務;2、在不不預覽的情況下,進行拍照操作。3、使用AlarmManager進行定時操作。

資源清單如下:

<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> 

服務代碼如下:

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();    // 注冊廣播   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);// 馬上開始,每1分鐘觸發一次  }   @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);    // 注銷廣播   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;  } } 

進行拍照存儲的操作代碼如下:

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");  } } 

項目代碼如下:

Android后臺開啟服務默默拍照

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 邹平县| 祁阳县| 泉州市| 双鸭山市| 荆门市| 鄂伦春自治旗| 吉林省| 安阳县| 沙河市| 凤冈县| 黄山市| 阳西县| 清水县| 柯坪县| 错那县| 贵德县| 昌黎县| 镇坪县| 洪江市| 宽甸| 罗平县| 昌邑市| 莲花县| 青铜峡市| 陆河县| 镇康县| 岚皋县| 普兰县| 尼木县| 锡林浩特市| 安塞县| 陇西县| 雅安市| 株洲县| 光泽县| 革吉县| 乌什县| 溧水县| 云浮市| 景德镇市| 富平县|