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

标签 permissions android-6.0-marshmallow

我在 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/

相关文章:

linux - 是否可以让 jenkins 访问只有 root 或某些特定程序才能访问的文件?

java - Java 中需要访问父函数的棘手情况

android - 如何在 Android Marshmallow 中创建 wifi 网络共享热点?

android - 在 Android M 中添加到用户字典

java - 如何在 Marshmallow 和 6.0 及以下版本中选择默认照片选择设置弹出窗口来打开前置摄像头

cordova - 在运行时请求权限 Ionic

Git push 说 - 请求的 URL 返回错误 : 403 but with sudo - works

permissions - 了解 Rabbitmq 权限

php - PHP shell_exec,拒绝执行-rwxrwxrwx Shell脚本的权限

android - 获取棉花糖中的当前位置 0,其中低于 23 API 它使用融合位置给出确切的当前位置