我在请求权限的背后遇到了手动流程的问题(只是不断陷入“被拒绝”的代码中),因此我改用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+操作系统的其他设备。提前致谢!
编辑:测试各种设备,它可以在某些上工作,而不能在某些上工作:
似乎不是一个固定的模式。我还开始了一个全新的项目,并运行了相同的代码-工作正常,并允许访问我的相机。因此,它似乎并不完全是特定于设备的。
事实证明,这是第三方库,在其清单中包含此行,覆盖了我们自己的许可:
<uses-permission android:name="android.permission.CAMERA" tools:node="remove" />
解决方案是手动将其项目作为模块导入(而不是使用gradle),然后注释掉该行,或者更简单-您可以在主项目的CAMERA末尾添加“ tools:node =“ replace”“权限行,此后工作正常;无需使用后一种方法导入项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句