【发布时间】:2017-03-21 15:04:43
【问题描述】:
这是我在 Android 中询问运行时 CAMERA 权限的代码。我从我的onCreate() 拨打handleCameraPermission()。
当我第一次运行我的应用程序时,权限会自动启用。我去了设置并禁用了权限。但checkIfPermissionEnabled() 仍然返回 true,但相机没有启动。那么,checkIfPermissionEnabled() 有什么问题呢?
当我设置hasCameraPermission = false并执行代码时,没有对话框,但启用了相机权限,一切正常。
private boolean checkIfPermssionEnabled() {
int result = ContextCompat.checkSelfPermission(context, android.Manifest.permission.CAMERA);
if(result == PackageManager.PERMISSION_GRANTED)
return true;
return false;
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case CAMERA_PERMISSION_REQUEST:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//granted
hasCameraPermission = true;
} else {
//not granted
hasCameraPermission = false;
super.onBackPressed();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
private void handleCameraPermission() {
int myVersion = Build.VERSION.SDK_INT;
if(myVersion >= Build.VERSION_CODES.M) {
hasCameraPermission = checkIfPermssionEnabled();
if(!hasCameraPermission) {
Log.d("cam","cam no permission");
//if(ActivityCompat.shouldShowRequestPermissionRationale(activity,android.Manifest.permission.CAMERA)) {
ActivityCompat.requestPermissions(activity,new String[]{android.Manifest.permission.CAMERA},CAMERA_PERMISSION_REQUEST);
Log.d("cam","cam dialog permission showed");
}
//else {
// ActivityCompat.requestPermissions(activity, new String[]{android.Manifest.permission.CAMERA}, CAMERA_PERMISSION_REQUEST);
//}
} else
Log.d("cam","cam has permission");
} else
hasCameraPermission = true;
}
我想要实现的是,如果未启用相机权限,则应显示询问权限的默认对话框,并且我应该为用户的输入获取回调,即在用户按下拒绝或允许时收到通知。
【问题讨论】:
-
你的
targetSdkVersion是什么? -
compileSdk 为 23,minSdk 为 16,targetSdk 为 17
-
targetSdkVersion 导致了问题。请看这个问题:stackoverflow.com/questions/33039188/…
-
会检查的。知道为什么在 requestPermission() 调用期间没有出现对话框吗?
标签: android permissions camera android-camera runtime-permissions