在Android Studio中如何稳定获取手机蜂窝基站的eNB ID
Android 应用获取蜂窝基站信息配置阶段注意事项
- 权限配置要覆盖不同系统版本要求
首先需在AndroidManifest.xml中声明基础权限,Android 6.0及以上版本必须额外做动态权限申请:- 通用场景需要声明
ACCESS_COARSE_LOCATION权限,targetSdkVersion >= 31 时额外需要ACCESS_FINE_LOCATION、READ_PHONE_STATE权限,缺少任意权限都会导致接口调用直接崩溃,且部分系统会过滤这类权限错误的崩溃日志,导致无报错反馈 - 所有敏感权限必须先确认用户已授权,再执行基站信息获取逻辑,不要直接在应用启动阶段就调用相关接口
- 通用场景需要声明
- 废弃接口兼容处理要到位
- Android 10(API 29)开始,原
getCellLocation()方法已被正式废弃,高版本系统上调用该接口会直接触发崩溃,必须使用getAllCellInfo()替代获取基站列表 - Kotlin 代码中所有
CellIdentity相关的字段取值必须加非空判断,运营商、芯片平台差异可能导致部分字段返回空值,不做空安全处理会直接抛出空指针异常闪退
- Android 10(API 29)开始,原
- 运行前置判断不能省略
- 调用接口前必须先判断当前蜂窝网络类型,仅LTE、5G NSA网络下存在eNB ID,当前为2G/3G/纯5G SA网络时,强制读取LTE相关字段会触发类型转换异常
- 要提前判断设备是否插入有效SIM卡、蜂窝网络是否处于可用状态,无SIM卡状态下调用TelephonyManager相关接口大概率直接崩溃
- 异常捕获兜底必须做
所有蜂窝信息相关的调用逻辑必须套try-catch块捕获所有异常,部分国内定制ROM对蜂窝信息获取做了额外限制,即使权限、配置全符合要求,也可能抛出厂商自定义的安全异常,未捕获就会直接导致应用崩溃 - 特殊机型适配要预留方案
部分厂商ROM要求额外开启系统设置中的「高精度位置权限」「设备信息获取权限」才能拿到基站相关字段,即使应用侧已经申请完所有官方要求的动态权限,也要做字段为空的兜底处理,不要强依赖接口返回值
内容的提问来源于stack exchange,提问作者F4Wins
相关产品推荐
相关产品推荐

