【Android Camera1】Camera1初始化销毁流程(三) —— 权限请求和相机功能大管家CameraManager

本文主要是介绍【Android Camera1】Camera1初始化销毁流程(三) —— 权限请求和相机功能大管家CameraManager,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

权限请求和相机功能大管家CameraManager

  • 一、权限请求
  • 二、线程管理
    • 2.1 单例
    • 2.2 Handler
    • 2.3 常用功能

本篇文章简单介绍初始化相关的权限请求和线程管理

一、权限请求

相机应用肯定需要相机权限,如果没有相机权限就初始化相机,基本会报如下类似错误:can't not connect camera service,因此在初始化相机之前一定要确保相机权限申请通过。我们可以在surfaceChange里添加如下代码:

 @Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {super.surfaceChanged(holder, format, w, h);tryInit();}public void tryInit(){if(ActivityCompat.checkSelfPermission(AppContexts.sContext, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {uiObserver.onPermissionDeny()return false;}uiObserver.onPermissionGranted()}

uiObserver是用来触发界面修改的。没有权限要在界面上提示用户,不然用户进来就发现黑屏就会觉得应用体验不好。容易遗失用户。

二、线程管理

CameraManager:即进行统一调度管理相机具体实现的抽象层。对上层暴露公共接口、对下层统一管理不同API的实现。一个基本健全的CameraManager应该包含如下功能:

2.1 单例

作为相机的抽象管理类,应该设计为单例

    private static final class SingleHolder {private static final CameraManager INSTANCE = new CameraManager();}public static CameraHelper of() {return SingleHolder.INSTANCE;}

2.2 Handler

//CameraManager.java
1. handle 作为消息分发
2. Android里可自行参考相关资料实现自己的Handler或者继承HandlerThread3.Handler处理业务层调用并分发消息给Camera实现类。
**********************************
public CameraHandler handler

2.3 常用功能

变量
*******************************************
private AbsBaseCameraImpl mCameraImpl;
public CameraHandler handler分发消息
1.初始化
2.对焦
3.缩放
4.曝光
5.闪光灯
6.拍照
7.stop
8.release
9.切换前后置
10.AWB:白平衡调节
********************************************
public static final int MSG_INIT_CAMERA = 0;
public static final int MSG_SWITCH_FOCUS = 2;
public static final int MSG_ZOOM_CHANGE = 3;
public static final int MSG_EXPOSURE_CHANGE = 4;
public static final int MSG_SWITCH_FLASH = 5;
public static final int MSG_TAKE_PIC = 6;
public static final int MSG_STOP_CAMERA = 7;
public static final int MSG_RELEASE_CAMERA = 8;
public static final int MSG_SWITCH_CAMERA = 9;
public static final int MSG_AWB_CHANGE = 10;对应函数
********************************************
public void initCamera(int cameraId, float aspectRatio){
getCameraHandler().sendMessage(handler.obtainMessage(MSG_INIT_CAMERA, cameraId, aspectRatio));
}public void switchFocus(int focusMode){...}
public void switchZoom(float zoomValue){...}
public void switchExposure(float exposureValue){...}
public void switchFlash(int flashMode){...}
public void takePic(TakePicCallBack callBack){...}
public void stopCamera(){...}
public void releaseCamera(){...}
public void switchCamera(){...}消息分发
********************************************
public void handleMessage(Message msg){switch (msg.what) {case MSG_INIT_CAMERA:camera.initCamera((int)msg.obj[0],(float)msg.obj[1]);break;...}
}
上层回调
1. previewSize selected
2. pictureSize selected
3. previewStarted
********************************************
public interface CameraStatusCallback {void onPreviewSizeChange(int width, int height);void onPictureSizeChange(int width, int height);void onPreviewStarted();
}

本篇文章简要介绍了权限检查和申请,以及CameraManager.java类的设计。

下一篇文章具体阐述Camera1Impl.java的实现。

如有疑问或勘误请评论或者通过如下邮箱联系我
sunquan9301@163.com

这篇关于【Android Camera1】Camera1初始化销毁流程(三) —— 权限请求和相机功能大管家CameraManager的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/341082

相关文章

Java数组初始化的五种方式

《Java数组初始化的五种方式》数组是Java中最基础且常用的数据结构之一,其初始化方式多样且各具特点,本文详细讲解Java数组初始化的五种方式,分析其适用场景、优劣势对比及注意事项,帮助避免常见陷阱... 目录1. 静态初始化:简洁但固定代码示例核心特点适用场景注意事项2. 动态初始化:灵活但需手动管理代

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

SpringBoot集成Milvus实现数据增删改查功能

《SpringBoot集成Milvus实现数据增删改查功能》milvus支持的语言比较多,支持python,Java,Go,node等开发语言,本文主要介绍如何使用Java语言,采用springboo... 目录1、Milvus基本概念2、添加maven依赖3、配置yml文件4、创建MilvusClient

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.