免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

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

這篇文章主要介紹Android如何實(shí)現(xiàn)后臺開啟服務(wù)默默拍照功能,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì)、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。成都創(chuàng)新互聯(lián)推出武安免費(fèi)做網(wǎng)站回饋大家。

具體內(nèi)容如下

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

資源清單如下:

<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(); 
 
  // 注冊廣播 
  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)行拍照存儲的操作代碼如下:

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后臺開啟服務(wù)默默拍照

以上是“Android如何實(shí)現(xiàn)后臺開啟服務(wù)默默拍照功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享名稱:Android如何實(shí)現(xiàn)后臺開啟服務(wù)默默拍照功能
轉(zhuǎn)載來于:http://m.newbst.com/article38/jedepp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號網(wǎng)站排名網(wǎng)站內(nèi)鏈網(wǎng)站建設(shè)網(wǎng)站策劃定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司