Android API 级别 >=23 中获得的权限事件处理
Permissions obtained Event Handling in Android API level >=23
我已经在运行时实现了请求权限,但我不确定何时可以调用需要权限的方法。
我无法立即调用该方法,因为用户需要时间在权限对话框中按下 "Yes" 按钮。
处理 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() 将永远不会被调用。
谢谢,@Drez 21。
解决方案是让 class 实现 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 已经实现了这个行为 - 例如使用它。
我已经在运行时实现了请求权限,但我不确定何时可以调用需要权限的方法。
我无法立即调用该方法,因为用户需要时间在权限对话框中按下 "Yes" 按钮。
处理 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() 将永远不会被调用。
谢谢,@Drez 21。 解决方案是让 class 实现 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 已经实现了这个行为 - 例如使用它。