Andriod Camera2 后台服务静默定时无预览拍照实现方式

本文介绍了如何在Android项目中使用Camera2 API实现后台无预览定时拍照功能。作者通过研究官方Demo,理解了关键步骤,包括使用AutoFitTextureView、设置照片保存路径、打开相机、设置相机输出、拍照以及照片保存。为了实现在activity销毁后仍能拍照,作者选择了将预览控件最小化并添加到系统界面的方式,并调整了相关代码以适应需求。
摘要由CSDN通过智能技术生成

最近在做一个项目,需要用到无预览拍照功能,Camera已被官方废弃,所有计划用Camera2来实现,在度娘上找了一翻,感觉Camera2蛮强大的,但关于后台无预览拍照的资源不是还多,找不到满足自己的需求。于是乎,自己下载了Camera2官方Demo研究了一翻,感觉Camera2很复杂,一堆接口,各种参数,自己菜鸟,几乎懵逼。但搞懂了Demo中拍照功能的几个关键点:

1、使用继承TextureView的AutoFitTextureView作为拍照预览的控件(不明白为什么不直接用TextureView);

2、实例化mFile(照片保存路径);

3、在AutoFitTextureView的方法onSufaceTextureViewAvailable中执行openCamera(width,height)方法;

4、在setUpCameraOutputs(width,height)中设置摄像头ID、图片格式、图片大小、前置/后置摄像头等信息;

5、通过takePicture()方法来执行拍照;

6、最后在onCaptureCompleted回调方法中操作mFile即可,此时mFile已指向拍照好的图片。

有了以上几点,其他代码不懂也没关系,可以获得照片是目的,接下来就是实现我的需求了。想了下两个思路,一是将预览控件设置到最小,放在activity上,设置为不可见。二是将预览控件设置到最小,添加到系统主界面上。由于需要后台拍照,即需要即使activity已经销毁了,还能继续运行,因此思路一似乎不可行,于是采用了思路二。把自己研究一个多小时的成果记录下,当作笔记,勿喷。

 

AndroidManifest.xml,比较简单,几个权限,一个服务,一个界面,第一个权限为了能将预览控件添加到系统界面上,外部读写权限为是能保存图片。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.test.com.takepictrueinbackground">

    <!-- 允许在其他应用上显示对话框权限 -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <!-- 外部存储读写权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <!--配置Camera权限-->
    <uses-permission android:name="android.permission.CAMERA" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <ca
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值