Android端信号强度监听,api23?

804 阅读1分钟

onSignalStrengthChanged()已经过期,但是监听PhoneStateListener.LISTEN_SIGNAL_STRENGTHS的话。 如果使用signalStrength.level()又会提示需要api23。 其实getLevel()方法并不是api23新加的,只是之前是hide方法。如下所示,用反射拿出来即可。 同学们也可自行加入版本判断。

        val service1 = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        service1.listen(object:PhoneStateListener(){
            override fun onSignalStrengthsChanged(signalStrength: SignalStrength) {
                super.onSignalStrengthsChanged(signalStrength)
                val javaClass = signalStrength.javaClass
                val method = javaClass.getDeclaredMethod("getLevel")
                if (method != null) {
                    method.isAccessible = true
                    val invoke = method.invoke(signalStrength)
                    LogUtils.d("invoke:$invoke")
                }
            }
        },PhoneStateListener.LISTEN_SIGNAL_STRENGTHS)