我遇到了请求权限背后的手动过程的问题(只是一直陷入’拒绝’代码),所以我切换到使用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 permissions, PermissionToken token) {
Log.d(TAG, "continuing permissions request..");
token.continuePermissionRequest();
}
})
.check();
它提示录制音频的权限,然后询问有关设备上的照片/媒体/文件的访问权限(它从不询问相机).然后,一旦完成,它会打印日志:“Accepted 3 | Denied:android.permission.CAMERA”.它甚至没有再提示我就否认它.
我的Manifest设置正确,使CAMERA位于适当的位置(‘application’标签之外).见下文供参考:
package="com.my.app">
android:name="android.hardware.camera"
android:required="true" />
android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" />
etc..
奇怪的是,当我进入设置>应用> MyApp,Camera选项甚至没有显示在那里.
我不认为这是Dexter的一个问题,因为当我手动设置它时,它基本上做了同样的事情(我确认在查看几个顶级的S.O.帖子后,它确实在这种情况下正确设置).
关于这个问题可能在这里的任何想法?仅供参考 – 我使用的是Galaxy S6,OS 6.0.2.遇到这种情况的其他用户似乎是具有6.0 OS的其他设备.提前致谢!
编辑:
测试各种设备,它适用于某些设备,但不适用于某些设备:
> Moto X(OS 5.0) – 破碎
> Nexus 5(OS 7.0) – 正常工作
>三星S6(OS 6.0.1) – 破碎
>破碎的Moto X(OS 6.0) – 工作
似乎不是一个坚实的模式..绝对奇怪.我也开始了一个全新的项目并运行相同的代码 – 工作正常并允许访问我的相机.所以它似乎并不完全是设备特定的..