本文实例为大家分享了Android后台开启服务默默拍照的具体代码,供大家参考,具体内容如下

最近项目原因,需要编写一后台运行的程序,在给定时间间隔下进行拍照,关键技术主要是:1、开启服务;2、在不不预览的情况下,进行拍照操作。3、使用AlarmManager进行定时操作。

资源清单如下:

package="com.yang.testservice"

android:versionCode="1"

android:versionName="1.0" >

android:minSdkVersion="13"

android:targetSdkVersion="15" />

android:icon="@drawable/ic_launcher"

android:label="@string/app_name"

android:theme="@style/AppTheme" >

android:name=".MainActivity"

android:label="@string/title_activity_main" >

服务代码如下:

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 后台服务拍照,Android实现后台开启服务默默拍照功能相关推荐

  1. 7开启uasp协议_Dubbo-go 源码笔记(一)Server 端开启服务过程

    导读:随着微服务架构的流行,许多高性能 rpc 框架应运而生,由阿里开源的 dubbo 框架 go 语言版本的 dubbo-go 也成为了众多开发者不错的选择.本文将介绍 dubbo-go 框架的基本 ...

  2. Android后台开启服务默默拍照

    最近项目原因,需要编写一后台运行的程序,在给定时间间隔下进行拍照,关键技术主要是:1.开启服务:2.在不不预览的情况下,进行拍照操作.3.使用AlarmManager进行定时操作. 资源清单如下: & ...

  3. android 后台自动拍照,Android实现后台开启服务默默拍照功能

    本文实例为大家分享了Android后台开启服务默默拍照的具体代码,供大家参考,具体内容如下 最近项目原因,需要编写一后台运行的程序,在给定时间间隔下进行拍照,关键技术主要是:1.开启服务:2.在不不预 ...

  4. android 后台自动拍照,怎么实现后台拍照功能,求解

    如何实现后台拍照功能,求解. 自己去网上找了一段后台拍照代码,如: MainActivity.java就实现一个按钮启动一个服务 public void click(View v) { bindSer ...

  5. android远程控制(三)----通过后台服务实现系统点击事件模拟

    整合后台服务和驱动代码注入 Home键的驱动代码: /dev/input/event1: 0001 0066 00000001 /dev/input/event1: 0000 0000 0000000 ...

  6. 如何检查后台服务(Android的Service类)是否正在运行?

    描述: 如何检查后台服务(Android的Service类)是否正在运行?我希望我的Activity能够显示Service的状态,然后我可以打开或者关闭它. 回答: Android系统提供了一个函数A ...

  7. android 8.0手机开服务端,Android 8.0 + Service开启方式兼容处理

    Android 8.0 + ,对后台服务进行了限制了.如果依然采用之前startService()方式. 会导致问题. 前后台服务的一些区别: 有人可能会问,后台服务我们可以自己创建 ONGOING ...

  8. android 后台运行service实现和后台的持续交互

    在项目中有这么一种需求 需要后台开启服务,时刻记录用户和软件的交互行为,一旦交互发生,就向服务器测发送一条消息 解决方案: 一.创建一个service服务类 在service中开启一个线程,servi ...

  9. android开启服务应用禁止被杀死,Android Service服务如何不被杀死

    第一章 Service介绍 service服务是一个应用程序的四大组件之一,可以再后台执行长时间运行的操作,不提供用户界面.一个应用程序组件可以启动一个服务,它将继续在后台运行,即使用户切到另一个应用 ...

最新文章

  1. mysql 业务账户_mysql的事务
  2. React Native开发环境搭建记录
  3. Linux下的Backlight子系统
  4. JDK 13:VM.events已添加到jcmd
  5. Windiws环境安装轻量级文件服务器ftpserver
  6. 常用原生js自定义函数
  7. nginx php7 fastcgi,[Mac php7 nginx]解决nginx FastCGI sent in stderr: “Primary script unknown”
  8. 用java swing做连连看_java基于swing实现的连连看代码
  9. 英特尔宣布推出锐炫 A 系列移动端独立显卡
  10. mysql5.7 非gtid同步
  11. Windows server 2003网络服务之搭建服务器群集
  12. 嵌入式系统硬件原理设计与审核
  13. VIM空格和TAB转换
  14. c/c++中与字符串处理相关的函数
  15. java创建ssh链接池_HttpClient实战三:Spring整合HttpClient连接池
  16. Gameplay - 多人游戏关卡设计
  17. 傅里叶变换的性质(一)
  18. 避免我们的邮件服务器发出的邮件被当成垃圾邮件
  19. 文件夹里子文件夹快速重命名编号技巧
  20. 2022-2028年全球与中国单过硫酸氢钾行业市场需求预测分析

热门文章

  1. R语言ggplot2可视化:ggplot2可视化直方图(histogram)并在直方图的顶部外侧(top upper)或者直方图内部添加数值标签
  2. R语言应用calibrate包的textxy函数向R原生绘图结果中添加文本标签:添加多个文本标签、改变文本标签的字体、改变文本标签的字体颜色
  3. R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战
  4. R语言ggplot2可视化对图形进行纹理填充实战及启示:遇到问题首先去思考有没有现成的包(ggpattern)可以去解决这个问题
  5. R语言构建xgboost模型:基于叶子索引衍生出新的特征并进行独热编码(one-hot encoding)之后构建新的模型、比较加入叶子索引特征的模型的分类性能提升
  6. 梯度下降回归SGDRegressor、岭回归(Ridge)和套索(Lasso)回归、套索最小角回归、ElasticNet回归、正交匹配追踪回归
  7. 使用keras构建LSTM分类器
  8. [Google API](1)简介
  9. 不用在读长和准确性之间做选择题,PacBio发表新方法
  10. The impact of third generation genomic technologies on plant genome assembly 第三代基因组技术对植物基因组组装的影响