关闭

Android 6 camera.open()异常解决方法

标签: android异常
8804人阅读 评论(5) 收藏 举报
分类:

最近需要在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

2
0
查看评论

Camera2 打开相机预览界面

camrea2 api打卡相机预览界面
  • xiaomingdbaba
  • xiaomingdbaba
  • 2016-06-13 14:19
  • 10093

Android之camera架构---open之指定ID

Camera的架构与Android系统的整体架构保持一致,如下图所示,本文主要从以下四个方面对其进行说明。 Framework:Camera.java Android Runtime:android_hardware_Camera.cpp Library:Camera Client和Camera ...
  • Z_HUALIN
  • Z_HUALIN
  • 2017-10-10 11:13
  • 395

Android 6 camera.open()异常解决方法

最近需要在Android平台写一个处理视频帧的Demo,于是在网上下了很多的Demo代码,奇怪的是下载的很多通过Camera提取视频帧的程序在Android Studio中都能通过编译,但是每次一放到真机上一测试程序就闪退崩掉了。  我的开发环境为Android Studio 2.1...
  • mmmccc000
  • mmmccc000
  • 2016-10-06 16:09
  • 541

Android 6 camera.open()异常解决方法

转自:http://blog.csdn.net/computerme/article/details/52148635 最近需要在Android平台写一个处理视频帧的Demo,于是在网上下了很多的Demo代码,奇怪的是下载的很多通过Camera提取视频帧的程序在Android St...
  • gf771115
  • gf771115
  • 2017-04-30 17:22
  • 1199

Android Camera 运行流程

1.总体架构 Android Camera 框架从整体上看是一个 client/service 的架构, 有两个进程: client 进程,可以看成是 AP 端,主要包括 JAVA 代码与一些 native c/c++代码; service 进 程,属于服务端,是 native c/c++代码,主...
  • unicornkylin
  • unicornkylin
  • 2013-10-28 16:03
  • 7811

Android Camera 流程学习记录(二)—— Camera Open 调用流程

简介 这一章里,我们将 Camera.java 中的 open() 方法作为切入点。作为打开摄像头的方法,无论哪种 Camera 应用都需要调用到它。
  • qq_16775897
  • qq_16775897
  • 2017-08-23 18:34
  • 971

opencamera

  • 2016-05-23 15:51
  • 3.41MB
  • 下载

Android实战技巧之三十三:android.hardware.camera2使用指南

API 21中将原来的camera API弃用转而推荐使用新增的camera2 API,这是一个大的动作,因为新API换了架构,让开发者用起来更难了。 先来看看camera2包架构示意图: 这里引用了管道的概念将安卓设备和摄像头之间联通起来,系统向摄像头发送Capture请求,而摄像头会返回...
  • lincyang
  • lincyang
  • 2015-05-24 15:19
  • 53527

Android Camera open流程

首先,Package层的Camera.java会调用Framework层的Camera.java的open函数,传入camera id。这个函数是个static函数,它只是new了一个Camera对象并返回。在Camera的构造函数中,最主要的就是调用JNI层的native_setup函数,传入两个...
  • vet
  • vet
  • 2013-04-02 23:01
  • 3447

Android camera fw学习(二)-open camera操作过程&准备工作分析。

备注:本文基于Android5.1、Camera hal3学习,默认情况下参考代码都是5.1的,如有其它版本的源码,我会标出来的。博文是看代码分析和一些工作经验的总结,如有疑问,大家可以相互讨论,共同进步。  当前博文主要是为后续的StartPreview,takepicture等流程分析做铺垫的,...
  • armwind
  • armwind
  • 2017-06-10 12:32
  • 1171
    个人资料
    • 访问:197535次
    • 积分:2911
    • 等级:
    • 排名:第14402名
    • 原创:86篇
    • 转载:6篇
    • 译文:0篇
    • 评论:75条
    文章分类
    最新评论