gpt4 book ai didi

permissions - 为什么在 onRequestPermissionsResult 之后调用 onResume?

转载 作者:行者123 更新时间:2023-12-04 02:18:37 25 4
gpt4 key购买 nike

我在 android 权限方面遇到了一些问题。问题是每次调用 onRequestPermissionsResult 时都会调用 onResume,即使用户已经说过“不再询问”。

一个例子:

  @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 被一次又一次地调用,尽管没有向用户显示对话框。

最佳答案

在检查权限后,您需要使用 shouldShowRequestPermissionRationale 作为条件检查的一部分。

调用 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();
}
}
}
}

关于permissions - 为什么在 onRequestPermissionsResult 之后调用 onResume?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35205643/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com