权限获得Android API级别的事件处理> = 23

时间:2016-10-30 11:52:50

标签: android android-permissions

我已在运行时实现了请求权限,但我不确定何时可以调用需要权限的方法。

我无法立即调用该方法,因为用户需要时间在权限对话框中按“是”按钮。

处理onPermissionsObtained事件非常有用,但我找不到任何类似的事件。

如何处理?

请参阅我的代码

private void startBuildInCameraActivity(View v) {

    if ((ContextCompat.checkSelfPermission(getActivity(), 
            Manifest.permission.CAMERA)
            != PackageManager.PERMISSION_GRANTED) ||
            (ContextCompat.checkSelfPermission(getActivity(), 
                    Manifest.permission.WRITE_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED)) {
        requestPermissions();


        //TODO init onPermissionObtained event handler here instead "return"
        return;
    }

    startCamera();
}

问题是如果用户没有权限,则需要两次调用startBuildInCameraActivity。否则将永远不会调用startCamera()。

1 个答案:

答案 0 :(得分:0)

谢谢,@德雷兹21。 解决方案是使类实现 FragmentCompat.OnRequestPermissionsResultCallback ,然后:

private void startBuildInCameraActivity(View v) {

    if ((ContextCompat.checkSelfPermission(getActivity(),
            Manifest.permission.WRITE_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED)) {
        requestPermissions();
    } else {
        startCamera();
    }
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
                                       @NonNull int[] grantResults) {

    if (grantResults.length != 1 || grantResults[0] != PackageManager.PERMISSION_GRANTED) {
        ErrorDialog.newInstance(getString(R.string.permissions_needs))
                .show(getChildFragmentManager(), FRAGMENT_DIALOG);
    } else {
        startCamera();
    }
}

This class已经实现了这种行为 - 例如使用它。