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

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-22 18:09:59
字體:
供稿:網(wǎng)友

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

最近項(xiàng)目原因,需要編寫一后臺(tái)運(yùn)行的程序,在給定時(shí)間間隔下進(jìn)行拍照,關(guān)鍵技術(shù)主要是:1、開啟服務(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);// 馬上開始,每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);    // 注銷廣播   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)開啟服務(wù)默默拍照

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


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 安陆市| 武冈市| 茂名市| 罗源县| 荆门市| 焦作市| 岫岩| 邵武市| 鲁山县| 贵阳市| 永寿县| 冷水江市| 高淳县| 高邮市| 虎林市| 汝州市| 云霄县| 海宁市| 留坝县| 平定县| 三原县| 砀山县| 高台县| 潢川县| 玛纳斯县| 江口县| 东乌珠穆沁旗| 荣成市| 康马县| 滨海县| 宜春市| 益阳市| 尖扎县| 隆化县| 诸暨市| 湾仔区| 德阳市| 文登市| 毕节市| 淮南市| 武冈市|