为什么在onRequestPermissionsResult之后调用onResume?
我在android权限方面遇到了一些问题。问题是每次调用onRequestPermissionsResult时都会调用onResume,即使用户已经说过“不再询问” 例如:为什么在onRequestPermissionsResult之后调用onResume?,permissions,android-6.0-marshmallow,Permissions,Android 6.0 Marshmallow,我在android权限方面遇到了一些问题。问题是每次调用onRequestPermissionsResult时都会调用onResume,即使用户已经说过“不再询问” 例如: @Override public void onResume() { super.onResume(); startLocationProvider(); } private void startLocationProvider() { if ( !locationService.r
@Override
public void onResume() {
super.onResume();
startLocationProvider();
}
private void startLocationProvider() {
if ( !locationService.requestLocationPermission( this, 0 ) ) {
return;
}
@Override
public void onRequestPermissionsResult( int requestCode, String[] permissions, int[] grantResults ) {
if ( requestCode == 0 ) {
if ( grantResults.length == 1 && grantResults[ 0 ] == PackageManager.PERMISSION_GRANTED ) {
startLocationProvider();
}
}
它可以正常工作,直到用户选择“永不再次询问”并拒绝。我不知道为什么会一次又一次地调用onResume,尽管没有向用户显示任何对话框。在检查权限后,您需要使用shouldShowRequestPermissionRegulation作为条件检查的一部分 调用onResume以允许您对权限检查的结果进行采样 以下是我正在从事的一个项目的剪报:
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (grantResults.length > 0) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Permission Granted
pickDownloadFolder();
} else if (grantResults[0] == PackageManager.PERMISSION_DENIED) {
// Permission Denied
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
result = "PERMISSION_DENIED";
Intent returnIntent = new Intent();
returnIntent.putExtra(resultKey, result);
setResult(RESULT_CANCELED, returnIntent);
finish();
} else {
result = "PERMISSION_DENIED_FORCED";
Intent returnIntent = new Intent();
returnIntent.putExtra(resultKey, result);
setResult(RESULT_CANCELED, returnIntent);
finish();
}
}
}
}
您是否尝试将权限请求移动到onStart而不是onResume?根据: 调用
onResume
,因为权限对话框导致活动暂停
正确的事件链如下所示:
requestPermissions
requestPermissions
开始在另一个线程中运行,因为它是
设计为不阻塞UI线程。因此,您的活动经历了onStart和onResumeonResume在onRequestPermissionResult之后调用,以允许您的活动考虑用户选择(授予或拒绝权限)并相应地执行代码。但现在真正的问题是,当用户选中“永不再次请求”并拒绝权限时,为什么会无限期地调用onRequestPermissionsResult?如果你发现了什么,请告诉我!尝试将代码从onResume中移出,并移到onStart中。