Android相机权限检测兼容问题
来源:互联网 发布:诺基亚java游戏接水管 编辑:程序博客网 时间:2024/05/17 06:08
转载请注明出处:
http://blog.csdn.net/aa464971/article/details/60587764
Android交流群:146262062
源码
https://github.com/dengyuhan/CameraPermissionCompat
6.0以后出了权限管理,而V4提供了一个权限检测的方法ContextCompat.checkSelfPermission
我在开发过程中遇到一个很诡异的问题:
有部分机型,当相机权限被禁用的时候,checkSelfPermission返回的boolean仍然为true,再打开相机就会报错。
后来换一个思路可以兼容,通过捕捉异常来检测权限
import android.Manifest;import android.app.Activity;import android.content.Context;import android.hardware.Camera;import android.os.Build;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.content.ContextCompat;import android.support.v4.content.PermissionChecker;/** * 摄像头权限检测 * author dengyuhan * created 2017/3/6 18:08 */public class CameraPermissionCompat { private static final int REQUEST_CODE_CAMERA = 999; private static OnCameraPermissionListener mOnCameraPermissionListener; /** * 检测摄像头权限 没有就会申请 * @param context * @param listener 申请权限的结果回调 * @return */ public static boolean checkCameraPermission(Context context, OnCameraPermissionListener listener) { mOnCameraPermissionListener = listener; boolean granted = true; //魅族或者6.0以下 if (isFlyme() || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { Camera mCamera = null; try { mCamera = Camera.open(); // setParameters 是针对魅族MX5 做的。MX5 通过Camera.open() 拿到的Camera // 对象不为null Camera.Parameters mParameters = mCamera.getParameters(); mCamera.setParameters(mParameters); } catch (Exception e) { granted = false; } if (mCamera != null) { mCamera.release(); } } else { granted = ContextCompat.checkSelfPermission(context, Manifest.permission.CAMERA) == PermissionChecker.PERMISSION_GRANTED; } if (granted) { if (mOnCameraPermissionListener != null) { mOnCameraPermissionListener.onGrantResult(true); } } else { if (context instanceof Activity) { ActivityCompat.requestPermissions((Activity) context, new String[]{Manifest.permission.CAMERA}, REQUEST_CODE_CAMERA); } } return granted; } public static void onRequestPermissionsResult(Context context, int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (requestCode == REQUEST_CODE_CAMERA) { if (mOnCameraPermissionListener != null) { mOnCameraPermissionListener.onGrantResult(checkCameraPermission(context,null)); } } } private static boolean isFlyme() { if (Build.BRAND.contains("Meizu")) { return true; } else { return false; } } public interface OnCameraPermissionListener { void onGrantResult(boolean granted); }}
0 0
- Android相机权限检测兼容问题
- android 应用开启以后,动态检测并或者相机权限。
- android 相机权限检查
- 权限检测_相机_麦克风
- Android 相机相册权限设置
- android 7.0调用相机权限
- android 权限录音权限检测
- android 调用系统相机方法,解决CPU兼容问题
- android 权限检测问题
- iOS 相机 麦克风 照片 权限的检测与获取
- android权限管理(包括相机权限,存储权限等等)
- android相机中的人脸检测注意
- Android 7.0相机适配权限管理
- Android 6.0动态权限调用相册相机
- 相机权限
- Android android 6.0权限校验及版本兼容问题
- Android之运行时相机权限和联系人权限获取
- Android 6.0 权限检测处理
- Cocos2d-x SpriteBatchNode
- oracle数据库 dmp文件cmd命令导入数据库报错
- 封装、多态、抽象、继承、接口
- Linux读取文件内容命令
- 【C#/WPF】键盘事件
- Android相机权限检测兼容问题
- 正则表达式之最短匹配
- window7 下运行hadoop
- java数据结构
- 使用Vs2015开发linux(centos7)程序
- 马化腾的焦虑和小程序的未来到底是什么?
- MySQL-Consecutive Numbers
- Python实现数据库数据导入Excel
- Python 多线程2