Android 6 camera.open()异常解决方法
来源:互联网 发布:淘宝客服退换货话术 编辑:程序博客网 时间:2024/05/16 05:13
最近需要在Android平台写一个处理视频帧的Demo,于是在网上下了很多的Demo代码,奇怪的是下载的很多通过Camera提取视频帧的程序在Android Studio中都能通过编译,但是每次一放到真机上一测试程序就闪退崩掉了。
我的开发环境为Android Studio 2.1,编译时的SDK选的是API 23,测试机为华为P9。
网上搜了很多资料说要在AndroidManifest文件中添加访问Camera的权限,然而我添加之后依然没有解决。这个问题折腾了我快一周,后面我才发现是权限的问题。我的测试机华为P9是Android 6的系统,而Android系统从6.0版本开始增加了一种运行时权限,Camera正好属于运行时权限,这种权限的授权不像6.0以前的Android系统可以安装APP的时候就一次性授权。综上,最后找到了程序在华为P9上一测试就崩掉的原因:程序在运行中请求camera.open()时实际上程序并未获得操作Camera的权限,所以camera.open()会一直打开失败。
问题找到了,怎么解决呐?下面介绍方法有两种。
方法一:修改编译的SDK,在src下的build.gradle中把编译的SDK改为低于23版本的SDK(因为Android 6系统对应的最低SDK版本号为API level 23)。下面是一个示例。
apply plugin: 'com.android.application'android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "org.mogujie.guigu.camerademo" minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } }}dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:22.0.0'}
方法二:在Java代码中添加运行时权限授权。方法:在需要用Camera的地方添加授权代码,如在Mainactivity的onCreate函数中添加如下代码。
// check Android 6 permission if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { Log.i("TEST","Granted"); //init(barcodeScannerView, getIntent(), null); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, 1);//1 can be another integer }
除此,由于以上代码来自其它包,因此还需要import下面的这些包
import android.Manifest;import android.app.Activity;import android.content.Intent;import android.content.pm.PackageManager;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.v4.app.ActivityCompat;import android.support.v4.app.FragmentActivity;import android.support.v4.content.ContextCompat;import android.view.KeyEvent;
Reference:
http://www.open-open.com/lib/view/open1450578678148.html
https://github.com/open-keychain/open-keychain/blob/master/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/QrCodeCaptureActivity.java
- Android 6 camera.open()异常解决方法
- Android 6 camera.open()异常解决方法
- Android 6 camera.open()异常解决方法
- Android 6 camera.open()异常解决方法
- Android Camera open流程
- Android Camera open流程
- Android 5.0 Camera (3):open camera
- Android Camera Subsystem - Open - 01
- Android Camera Subsystem - Open - 02
- Android Camera open运行流程
- Android camera打开或前后摄切换瞬间颜色异常解决方法
- Android camera fw学习(二)-open camera操作过程&准备工作分析。
- Open the Android native Camera using OpenCV
- Android之camera架构---open之new
- Android真机测试中Unable to open sync connection异常解决方法
- Android camera调用出现错误解决方法
- Android camera setParameters failed 错误解决方法
- Android 异常解决方法汇总
- java基本排序之希尔排序
- Python 正则表达式(5)电话号匹配
- Python Web开发与Flask简介
- 按层次生成、遍历二叉树
- JavaScript实现封装
- Android 6 camera.open()异常解决方法
- 【项目笔记】布局文件报错Suspicious size: this will make the view invisible, probably intended for layout_width
- Java中使用Runtime和Process类运行外部程序
- java学习之字符串的截取
- 小随笔 SQL语句中的条件判断CASE
- 文章标题 HDU 5583:Kingdom of Black and White(暴力+代码实现能力)
- CentOS 6.5 升级 openssh
- IOS开发-基础篇-Three
- C语言规范及编译器