Android6.0获取4G信号的信号强度(dbm)
2018-02-07 13:05
441 查看
起因:项目需要获取4G信号强度,进行显示。
经过:通过google,发现获取4G信号强度都是通过读取字符串的方式获取,但是我还没有搞懂取出的是什么,也不知道怎么通过那个值转化成显示的格数。
所以,我想看看系统是怎么实现的,看看能不能用跟系统同样的方式获取dbm值或者取出信号强度的格数。
结果:经过一番折腾,终于找到了一个隐藏的方法:
在frameworks\base\telephony\java\android\telephony\SignalStrength.java内找到该方法
/**
* Get the signal strength as dBm
*
* @hide
*/
public int getDbm() {
int dBm;
if(isGsm()) {
dBm = getLteDbm();
//MTE-START [ALPS01200757]
//if (dBm == INVALID) {
if (!isCampOnLte()) {
//MTE-END [ALPS01200757]
dBm = getGsmDbm();
}
} else {
int cdmaDbm = getCdmaDbm();
int evdoDbm = getEvdoDbm();
return (evdoDbm == -120 || evdoDbm == -113) ? cdmaDbm
: ((cdmaDbm == -120 || cdmaDbm == -113) ? evdoDbm
: (cdmaDbm < evdoDbm ? cdmaDbm : evdoDbm));
}
if (DBG) {
log("getDbm=" + dBm);
}
return dBm;
}
但是该方法是隐藏的,凑巧的是,通过方法
public void onSignalStrengthsChanged(SignalStrength signalStrength)
来监听4G信号变化,刚好有SignalStrehgth对象,那就通过反射的方式获取,正好
Method method1 = null;
method1 = signalStrength.getClass().getMethod("getDbm");
dbm = method1.invoke(signalStrength);
这样就能取出dbm值了。
注:
Method method2 = signalStrength.getClass().getMethod("getLteLevel");
level = method2.invoke(signalStrength);
通过这个方法能获取出和系统一样的信号格数。
经过:通过google,发现获取4G信号强度都是通过读取字符串的方式获取,但是我还没有搞懂取出的是什么,也不知道怎么通过那个值转化成显示的格数。
所以,我想看看系统是怎么实现的,看看能不能用跟系统同样的方式获取dbm值或者取出信号强度的格数。
结果:经过一番折腾,终于找到了一个隐藏的方法:
在frameworks\base\telephony\java\android\telephony\SignalStrength.java内找到该方法
/**
* Get the signal strength as dBm
*
* @hide
*/
public int getDbm() {
int dBm;
if(isGsm()) {
dBm = getLteDbm();
//MTE-START [ALPS01200757]
//if (dBm == INVALID) {
if (!isCampOnLte()) {
//MTE-END [ALPS01200757]
dBm = getGsmDbm();
}
} else {
int cdmaDbm = getCdmaDbm();
int evdoDbm = getEvdoDbm();
return (evdoDbm == -120 || evdoDbm == -113) ? cdmaDbm
: ((cdmaDbm == -120 || cdmaDbm == -113) ? evdoDbm
: (cdmaDbm < evdoDbm ? cdmaDbm : evdoDbm));
}
if (DBG) {
log("getDbm=" + dBm);
}
return dBm;
}
但是该方法是隐藏的,凑巧的是,通过方法
public void onSignalStrengthsChanged(SignalStrength signalStrength)
来监听4G信号变化,刚好有SignalStrehgth对象,那就通过反射的方式获取,正好
Method method1 = null;
method1 = signalStrength.getClass().getMethod("getDbm");
dbm = method1.invoke(signalStrength);
这样就能取出dbm值了。
注:
Method method2 = signalStrength.getClass().getMethod("getLteLevel");
level = method2.invoke(signalStrength);
通过这个方法能获取出和系统一样的信号格数。
相关文章推荐
- android 双卡开发获取sim卡默认数据卡,获取sim卡信息,sim1卡,sim2卡 2G/3G/4G信号强度
- 手机信息的获取(手机IMEI,手机sim卡的IMSI,网络类型(WiFi,LTE(即4G)等),信号强度(蜂窝网络非WiFi),经纬度)
- Android 获取信号强度
- Android 信号强度的获取
- android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
- 没有SIM卡,GPRS模块也可以获取信号强度吗?
- Android 获取 Wifi 信号强度,检测是 Wifi 或者流量,获取手机电池电量及充电状态
- android开发之获取信号强度
- Android获取到手机信号强度信息后传回给unity
- Android——获取手机当前信号强度(dbm/asu值)
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
- 通过OpenNetCF来获取周围的Wifi设备以及信号强度
- Wince获取Wifi的设备名、连接状态和信号强度
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
- Android 获取手机型号、信号强度、厂商等信息
- android获取bluetooth的信号强度(RSSI)
- android 获取蓝牙信号强度,连接后获取蓝牙RSSI信号强度
- Android监听获取手机信号强度
- 【小功能2】android获取手机信息(号码,内存,CPU,分辨率,MAC,IP,SD卡,IMEI,经纬度,信号强度等等)
- Android wifi 信号强度单位 dbm