当前位置: 首页 > 知识库问答 >
问题:

requestPermissions()请求多个权限,但onRequestPermissionsResult只接收单个权限结果

陈实
2023-03-14

我正在实施应用程序权限流以使用地理位置。我通过片段中的requestPermissions()请求了ACCESS\u FINE\u LOCATION和ACCESS\u rough\u LOCATION。

requestPermissions(
  arrayOf(Manifest.permission.ACCESS_COARSE_LOCATION,
    Manifest.permission.ACCESS_FINE_LOCATION),
    PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION
  )

companion object {
        private const val PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION = 1
  :
}

我在片段中收到了onRequestPermissionsResult()的请求权限结果。

override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
        when (requestCode) {
            PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION -> {
                if (grantResults.isNotEmpty() &&
                    grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    // User granted permission in system dialog
                } else {
                  // User denied permissions
                }
            }
        }
    } 

但奇怪的是,onRequestPermissionsResult()只收到了一个权限,即第二个参数中的ACCESS\u rough\u LOCATION作为权限:Array。即使在系统对话框中选择了“允许”,checkSelfPermission()也返回false。

// this condition returns false after receiving permission result on onRequestPermissionsResult()
ContextCompat.checkSelfPermission(requireContext(),
                Manifest.permission.ACCESS_FINE_LOCATION)
                == PackageManager.PERMISSION_GRANTED &&
                ContextCompat.checkSelfPermission(requireContext(),
                    Manifest.permission.ACCESS_COARSE_LOCATION) {
}

我想知道为什么onRequestPermissionsResult()只收到ACCESS\u rough\u LOCATION作为结果,即使我在调用requestPermissions()时通过提供ACCESS\u rough\u LOCATION、ACCESS\u FINE\u LOCATION数组来请求多个权限。

你能解释一下为什么权限请求只返回单个权限结果吗?

提前谢谢你的帮助。

共有1个答案

扶冠宇
2023-03-14

您只需使用单个权限访问\u FINE\u位置。你不需要两者都用。因为您的请求权限包括访问精细位置和粗略位置。

https://developer.android.com/training/location/retrieve-current#Permission

对于处理多个权限,我强烈建议使用下面的库来完美地处理每个场景。

德克斯特:com。卡鲁米:德克斯特:6#

对于您可以使用的多个权限:

Dexter.withContext(this)
    .withPermissions(
        Manifest.permission.CAMERA,
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.RECORD_AUDIO
    ).withListener(new MultiplePermissionsListener() {
        @Override public void onPermissionsChecked(MultiplePermissionsReport report) {/* ... */}
        @Override public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {/* ... */}
    }).check();

祝你好运

 类似资料:
  • 我想知道如何在单个请求上添加多个权限。这是关于Marshmallow版本的Android。

  • 问题内容: 嗨,我正在更新我的应用程序贾夫纳神庙。使其可以支持Android M设备(v 6.0及更高版本)。 有没有一种方法可以一次请求多个权限。例如:我想获得同时读取手机状态和位置信息的权限。 通过这种方式,我可以一一请求权限。但是我想在应用程序启动时立即放下两个权限。 请给我一些建议。Tnx。 问题答案: 有没有办法我可以一次请求多个权限 在您要传递给的许可中放置多个权限。 例如,在这个示例

  • 需要一些关于iOS开发的帮助。Swift 5 在swift 5中,有没有办法将3个系统权限警报(相机、麦克风和照片)合并在一个警报中? 使用AVCaptureDevice访问相机和麦克风,使用PHPhotoLibrary访问照片...

  • 示例(忘记了google应用程序的名称:() 应用程序需要短信、联系人和摄像头 应用程序要求我激活短信,激活联系人,然后再激活相机(并做了一个对话框1-3页)。所以这个谷歌应用程序调用了所有三个必需的权限,我的问题是我如何才能实现相同的?

  • 我想申请以下权限:。根据这个答案,我是这样申请权限的: 问题是我的应用程序只请求存储权限没有别的。 和是未请求或授予的权限。我如何按顺序询问所有权限? 以下是未授予和权限的证明:

  • HttpURLConnection使我的应用程序崩溃,因为即使我在清单文件中使用标记,也没有授予internet权限