You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中使用Dexter库时INTERNET权限不弹出授权对话框问题

问题原因与解决方案

核心原因

Android将权限分为两类,这是导致你遇到该现象的关键:

  • 正常权限(Normal Permissions):INTERNET属于这类权限,只要在AndroidManifest.xml中声明,系统就会自动授予,不需要用户手动授权,也不会弹出授权对话框。
  • 危险权限(Dangerous Permissions):ACCESS_FINE_LOCATION、ACCESS_COARSE_LOCATION属于这类权限,涉及用户隐私,必须通过动态申请触发用户授权弹窗。

所以你看到的INTERNET权限自动显示已授予、仅弹出位置权限对话框是完全正常的系统行为。

代码修正方案

你不需要在Dexter的权限检查列表中加入INTERNET,因为它无需动态校验。修改后的代码如下:

Dexter.withContext(this)
        .withPermissions(
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
        )
        .withListener(object : MultiplePermissionsListener {
            override fun onPermissionsChecked(p0: MultiplePermissionsReport?) {
                p0?.let {
                    if (p0.areAllPermissionsGranted()) {
                        getWeather()
                        getForecast()
                    }
                }
            }

            override fun onPermissionRationaleShouldBeShown(
                p0: MutableList<PermissionRequest>?,
                p1: PermissionToken?
            ) {
                p1?.continuePermissionRequest()
            }
        }).check()

AndroidManifest.xml中的INTERNET权限声明保留即可,它会自动生效:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>

额外说明

如果需要确认INTERNET权限状态,可通过Context.checkSelfPermission(Manifest.permission.INTERNET)判断,只要Manifest中已声明,该方法永远返回PackageManager.PERMISSION_GRANTED。

内容的提问来源于stack exchange,提问作者Mohsen Mashkour

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:01:27