【发布时间】:2017-08-29 23:35:59
【问题描述】:
我在请求权限背后的手动过程中遇到了问题(只是一直陷入“拒绝”代码),所以我改用 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();
它会提示您授予录制音频的权限,然后询问是否可以访问设备上的照片/媒体/文件(它从不询问相机)。然后一旦完成,它会打印日志:“Accepted 3 | Denied: 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..
奇怪的是,当我进入“设置”>“应用程序”>“我的应用程序”时,相机选项甚至没有显示在那里。
我认为这不是 Dexter 的问题,因为当我手动设置它时,它的作用基本相同(在查看了一些顶级 SO 帖子后,我确认在这种情况下它肯定设置正确)。
对这里可能出现的问题有什么想法吗?仅供参考 - 我使用的是 Galaxy S6,操作系统 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) - 工作
似乎不是一个固定的模式.. 绝对奇怪。我还开始了一个全新的项目并运行相同的代码 - 工作正常并允许访问我的相机。所以它似乎不是完全特定于设备的..
【问题讨论】:
-
您是否卸载了该应用并尝试过?
-
是的,我已经尝试卸载/重新安装应用程序,重新启动设备等。问题仍然存在。 :(
标签: android android-camera android-external-storage