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

Android 10及以上无需READ_PHONE_STATE权限获取网络连接类型的方法

方案可行性验证及权限说明

你给出的代码方案完全可行,且确实无需申请READ_PHONE_STATE权限,不需要引导用户手动进入应用设置修改权限。

核心逻辑说明

  • 两者的权限适用场景完全不同:
    • READ_PHONE_STATE属于敏感权限,仅在需要获取设备身份标识(IMEI/IMSI)、SIM卡状态、蜂窝网络具体制式(3G/4G/5G细分类型)等敏感信息时才需要使用,Android 10之后确实限制应用自动获取该权限,必须用户手动授予。
    • 你用到的ConnectivityManager#getNetworkCapabilities相关API,仅用于判断当前网络的传输类型,不会获取任何敏感信息,谷歌官方明确规定该组API仅需要普通权限ACCESS_NETWORK_STATE,该权限属于安装时自动授予的普通权限,不需要用户手动同意,也不需要动态申请,只需要在AndroidManifest.xml中添加即可:
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    

兼容优化建议

你代码中使用的getActivityNetwork()是Android 12(API 31)才新增的API,如果你的应用需要兼容Android 10(API 29)、Android 11(API 30)版本,建议替换为getActiveNetwork(),兼容性覆盖更全面。如果仅需要判断网络是WiFi还是蜂窝传输类型,不需要额外权限。
如果后续你需要获取蜂窝网络的具体制式(如准确判断是3G/4G/5G),才需要申请READ_PHONE_STATE权限。

内容的提问来源于stack exchange,提问作者Chief Madog

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 06:57:03