Android-相机权限被拒绝而不提示

svguerin3

我在请求权限的背后遇到了手动流程的问题(只是不断陷入“被拒绝”的代码中),因此我改用Dexter进行简化。我在onCreate()中实现了以下代码,并重新安装了该应用程序:

Dexter.withActivity(this)
            .withPermission(Manifest.permission.CAMERA)
            .withListener(new PermissionListener() {
                @Override public void onPermissionGranted(PermissionGrantedResponse response) {
                    Log.d(TAG, "GRANTED!");
                    initCamera();
                }
                @Override public void onPermissionDenied(PermissionDeniedResponse response) {
                    Log.d(TAG, "DENIED!");
                }
                @Override public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {
                    Log.d(TAG, "PERMISSION RATIONAL SHOULD BE SHOWN!");

                }
            }).check();

它立即落入“拒绝!” 日志,甚至从未提示我。我尝试了以下特定代码来尝试多个权限(这最终是我需要做的):

Dexter.withActivity(activity)
            .withPermissions(Manifest.permission.CAMERA,
                    Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.READ_EXTERNAL_STORAGE,
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
            .withListener(new MultiplePermissionsListener() {
                @Override
                public void onPermissionsChecked(MultiplePermissionsReport report) {
                    Log.d(TAG, "Accepted: " + report.getGrantedPermissionResponses().size() + " | Denied: " + report.getDeniedPermissionResponses().get(0).getPermissionName());
                }

                @Override
                public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
                    Log.d(TAG, "continuing permissions request..");

                    token.continuePermissionRequest();
                }
            })
            .check();

它提示输入录制音频的权限,然后询问是否可以访问设备上的照片/媒体/文件(从不询问相机)。然后,一旦完成,它就会打印日志:“已接受3 |被拒绝:android.permission.CAMERA”。它否认了它,甚至没有再次提示我。

我的清单已正确设置为在适当位置(“应用程序”标签之外)具有CAMERA。请参阅以下参考:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my.app">

<uses-feature
    android:name="android.hardware.camera"
    android:required="true" />

<permission
    android:name="${applicationId}.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
etc..

奇怪的是,当我进入“设置”>“应用程序”>“ MyApp”时,“相机”选项甚至没有显示在其中。

我认为这与Dexter无关,因为当我手动设置它时,它所做的基本上是同一件事(并且在查看了几篇顶级SO帖子后,我确认在那种情况下它肯定是正确设置的)。

对这个问题有什么想法吗?仅供参考-我正在使用Galaxy S6,OS 6.0.2。遇到此问题的其他用户似乎是装有6.0+操作系统的其他设备。提前致谢!

编辑:测试各种设备,它可以在某些上工作,而不能在某些上工作:

  • Moto X(OS 5.0)-损坏
  • Nexus 5(OS 7.0)-有效
  • 三星S6(OS 6.0.1)-损坏
  • 破碎的Moto X(OS 6.0)-作品

似乎不是一个固定的模式。我还开始了一个全新的项目,并运行了相同的代码-工作正常,并允许访问我的相机。因此,它似乎并不完全是特定于设备的。

svguerin3

事实证明,这是第三方库,在其清单中包含此行,覆盖了我们自己的许可:

<uses-permission android:name="android.permission.CAMERA" tools:node="remove" />

解决方案是手动将其项目作为模块导入(而不是使用gradle),然后注释掉该行,或者更简单-您可以在主项目的CAMERA末尾添加“ tools:node =“ replace”“权限行,此后工作正常;无需使用后一种方法导入项目。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章