我已在运行时实现了请求权限,但我不确定何时可以调用需要权限的方法。
我无法立即调用该方法,因为用户需要时间在权限对话框中按“是”按钮。
处理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()。
答案 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已经实现了这种行为 - 例如使用它。