Android 6.0 RuntimeException:无法连接到相机服务

Posted

技术标签:

【中文标题】Android 6.0 RuntimeException:无法连接到相机服务【英文标题】:Android 6.0 RuntimeException: Fail to connect to camera service 【发布时间】:2016-01-21 11:10:45 【问题描述】:

我在 Nexus5 (android6.0) 中运行的应用出现错误。

错误是

java.lang.RuntimeException: 连接相机服务失败

我已将权限添加到 AndroidManifest.xml。

但该应用可以在另一部手机(Android5.1)和 genymotion AVD(Android 4.0)上运行。

关键代码如下

 @Override
public void onResume() 
    super.onResume();
    try 
        mCamera = Camera.open();
    catch (Exception e)
        Log.e(TAG,"open camera failed",e);
    


【问题讨论】:

查看***.com/questions/33030933/… 请添加整个 Stacktrace。我猜你也有一个SecurityException,这表明你没有在运行时请求相机权限。 【参考方案1】:

在你的 gradle.build targetSdkVersion 22 中写入。这是一个临时解决方案,但有效。

【讨论】:

这也是我的解决方案。很奇怪!可能是什么原因? 一点也不奇怪。 API 级别 将 Target sdk 更改为 22 不是解决方案,因为它对于 android 6 设备仍然会失败,请按照此链接 developer.android.com/training/permissions/requesting.html 使用 android 6 方式进行正确实施 代替这些应用运行时权限以获得更好的结果,您也可以在 6.0 以上使用它【参考方案2】:

打开设置->应用->点击你的应用->权限->打开相机权限。 你可以看到: http://developer.android.com/training/permissions/requesting.html

【讨论】:

【参考方案3】:

这是因为在 Android 6.0 中权限模型不同。您必须实施新的权限模型,该模型在运行时请求权限。即使您不要求它,您也可以在手机的应用设置中手动启用它,但是当您在 Play 商店中发布您的应用时,这将不起作用。 Here 是一篇关于如何获得运行时权限的文章

您还可以查看 Nick 的回答 here 以获得多个权限

【讨论】:

【参考方案4】:

从 android 6.0 开始,您可以处理应用程序权限天气,您将为应用程序授予或不授予特定权限。 在您的情况下,如果您没有为您的应用启用相机权限,则可能会出现此问题。

所以,你需要从settings->apps->your_app->enable camera权限开启权限。

【讨论】:

你拯救了我的一天!但是,我们似乎必须像@Amalan Dhananjayan 一样明确地请求权限,否则最终用户不应该知道一些棘手的事情,例如设置->应用程序->您的应用程序->启用相机 @Houssem 是的,您需要以编程方式处理此问题。 inthecheesefactory.com/blog/… 一个很好的教程。【参考方案5】:

打开相机前添加相机权限:

点击链接添加权限: https://developer.android.com/training/permissions/requesting.html

【讨论】:

以上是关于Android 6.0 RuntimeException:无法连接到相机服务的主要内容,如果未能解决你的问题,请参考以下文章

The project target (Android 6.0) was not properly loaded或者The rendering target (Android 6.0) is stil

Android Studio 3.0 任务执行失败:无法合并 dex

Android 6.0 运行时权限处理完全解析

Android 6.0 修改默认语言

Android 6.0+ 运行时权限探索

Android 6.0 Changes