|
1. 为了解决这个问题,我创建在Android Market上可自由查看的应用程序称为信号强度检测,并与在GitHub上的源代码(它也是非常重要的,我的应用程序,因为它被设计成一个pubs,结果上可以找到我们。博客,我将总结的结果:在较新的设备是有getLevel在方法SignalStrength返回从0-4的整数-4报告的信号强度 CodeGo.net,在其他LTE设备(我不相信HTC霹雳),有喜欢getLteCqigetLteRsrpgetLteRsrq和getLteRssnr我将离开你,以确定这些值是如何计算的信号强度。最后,我发现,在设备上(我相信HTC霹雳)的LTE信号的强度实际上是报告为GSM的!这是疯狂的,但却是事实。随意下载zip我们的博客上,看到与田野SignalStrength在广泛的设备。 作为一个方面说明,你需要思考,以再次访问,我将离开你,以确定如何最好的。这是相当简单的,但你需要做大量的try-catch,以确定是否存在,以及setAccessible(true)只是忽略任何问题 希望这会有所帮助!
2. 您需要此代码。事实上,所有你需要的是在这里:
String ssignal = signalStrength.toString();
String[] parts = ssignal.split(" ");
该parts[]那么数组将包含这些
part[0] = "Signalstrength:" _ignore this, it's just the title_
parts[1] = GsmSignalStrength
parts[2] = GsmBitErrorRate
parts[3] = CdmaDbm
parts[4] = CdmaEcio
parts[5] = EvdoDbm
parts[6] = EvdoEcio
parts[7] = EvdoSnr
parts[8] = LteSignalStrength
parts[9] = LteRsrp
parts[10] = LteRsrq
parts[11] = LteRssnr
parts[12] = LteCqi
parts[13] = gsm|lte
parts[14] = _not reall sure what this number is_
所以,LTEdBm是:
TelephonyManager tm = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
int dbm = 0;
if ( tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE){
dbm = Integer.parseInt(parts[8])*2-113;
}
else{
if (signalStrength.getGsmSignalStrength() != 99) {
int intdbm = -113 + 2
* signalStrength.getGsmSignalStrength();
dbm = Integer.toString(intdbm);
}
}
再见
3. 您需要注册LISTEN_SIGNAL_STRENGTHS一个PhoneStateListener。那么你会得到一个回调与当前信号强度,并与未来的更新回调。
|
|