东莞市住房和城乡建设厅网站首页石家庄情况最新消息今天
web/
2025/10/7 9:08:59/
文章来源:
东莞市住房和城乡建设厅网站首页,石家庄情况最新消息今天,乔拓云网微信小程序制作,哪些广告平台留号码能看到这篇文章说明网上哪些获取 #xff08;dbm/asu值#xff09;不适合你#xff0c;不是他们的代码不正确#xff0c;而是不符合你的情况
比如安卓6获取android手机信号强度 可以看这篇文章 https://blog.csdn.net/sinat_31057219/article/details/81134030
当然如果你…能看到这篇文章说明网上哪些获取 dbm/asu值不适合你不是他们的代码不正确而是不符合你的情况
比如安卓6获取android手机信号强度 可以看这篇文章 https://blog.csdn.net/sinat_31057219/article/details/81134030
当然如果你是安卓10设备并且为 LTE 网络 的情况下那么就不能用了你会发现 getGsmSignalStrength() 总是返回 99 代表无效值
如果你急的话可以直接拉到文章末尾复制粘贴 解决
先看代码 private fun startListening() {val telephonyManager context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManagertelephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)}fun stopListening() {val telephonyManager context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManagertelephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)}private val phoneStateListener: PhoneStateListener object : PhoneStateListener() {RequiresApi(Build.VERSION_CODES.Q)override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {super.onSignalStrengthsChanged(signalStrength)val asu signalStrength.gsmSignalStrength;val dbm -113 2*asu;//Trace.d(strength: $strength)this.strength $dbm dBm, $asu asu}}
上面代码是网上大部分获取 dbm/asu值 的方法不适用就不解释了
通过开发者文档可了解到https://developer.android.com/reference/android/telephony/SignalStrength#getCellSignalStrengths() 在API29 中 getGsmSignalStrength 已经被废弃了推荐参考 CellSignalStrength
在 CellSignalStrength中可以看到我们需要的这两个值 既然现在没有方法获取正确的 dbm/asu值那就试试呗在 SignalStrength 也就是上面代码监听方法override fun onSignalStrengthsChanged(signalStrength: SignalStrength)的参数可以调用 getCellSignalStrengths() 方法得到一个 ListCellSignalStrength集合get[0] 就是获取第一个信号对象 val dbm signalStrength.cellSignalStrengths[0].dbmval asu signalStrength.cellSignalStrengths[0].asuLevel输出打印和系统中的SIM卡状态的信号值一模一样完美解决✨ 问题原因
知其然也要知其所以然
API 变更和限制从 Android 7.0Nougat开始Google 对 SignalStrength 类进行了修改增加了对不同信号类型的支持。getGsmSignalStrength() 方法适用于 GSM 网络对于 LTE 网络并不适用。如果设备当前连接的是 LTE 或其他网络类型该方法可能返回无效值如 99代表未知或未报告的信号强度。
API 的适用性getGsmSignalStrength() 方法返回的是 ASUArbitrary Signal Unit值而不是 dBm。ASU 是一个在 0 到 31 之间的整数99 表示未知。对于 LTE 网络应使用更适当的方法来获取 dBm 值。
对于 Android 10API 级别 Q设备应该使用更新的 API如 cellSignalStrengths它返回了一个 ListCellSignalStrength可以覆盖包括 LTE 在内的多种网络技术下面是正确示例代码
private val phoneStateListener: PhoneStateListener object : PhoneStateListener() {RequiresApi(Build.VERSION_CODES.Q)override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {super.onSignalStrengthsChanged(signalStrength)// 获取第一个信号对象通常是当前连接的网络类型的信号val cellStrength signalStrength.cellSignalStrengths[0]// 获取 dBm 值val dBm cellStrength.dbm// 获取 ASU 值对于 LTE 网络ASU 的计算方式可能与 GSM 不同val asu cellStrength.asuLevel}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/88382.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!