【问题标题】:Android Runtime Permissions Not WorkingAndroid 运行时权限不起作用
【发布时间】: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;
}

我想要实现的是,如果未启用相机权限,则应显示询问权限的默认对话框,并且我应该为用户的输入获取回调,即在用户按下拒绝或允许时收到通知。

【问题讨论】:

标签: android permissions camera android-camera runtime-permissions


【解决方案1】:

你忘了用这种方式询问权限:

ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, YOUR_REQUEST_CODE);

【讨论】:

  • 它就在那里。请检查 if(!hasCameraPermission) 块。
  • 删除布尔 hasCameraPermission 并尝试始终使用 checkIfPermssionEnabled() 方法。
猜你喜欢
  • 2018-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
相关资源
最近更新 更多