借鉴了其他人的一些方法,但是在中间发现LTE的情况下。使用getDbm()方法是获取不到信号强度的。需要另外一个Rssi。
具体如下:
/**
* 获取手机信号强度,需添加权限 android.permission.ACCESS_COARSE_LOCATION <br>
* API要求不低于17 <br>
*
* @return 当前手机主卡信号强度, 单位 dBm(-1是默认值,表示获取失败)
*/
@RequiresApi(api = Build.VERSION_CODES.Q)
public static int getMobileDbm(SignalStrength signalStrength,TelephonyManager telephonyManager) {
int dbm = -1;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
List<CellSignalStrength> cellSignalStrengths = signalStrength.getCellSignalStrengths();
if (null!=cellSignalStrengths){
for (CellSignalStrength cellSignalStrength:cellSignalStrengths){
if (cellSignalStrength instanceof CellSignalStrengthGsm){
Log.e("tiwolf", "getMobileDbm: Gsm 信号强度为="+cellSignalStrength.getDbm() );
if (telephonyManager.getNetworkType()==TelephonyManager.NETWORK_TYPE_GSM){
dbm= cellSignalStrength.getDbm();
}
}else if (cellSignalStrength instanceof CellSignalStrengthLte){
Log.e("tiwolf", "getMobileDbm: Lte 信号强度为="+cellSignalStrength.getDbm() );
if (telephonyManager.getNetworkType()==TelephonyManager.NETWORK_TYPE_LTE){
dbm= cellSignalStrength.getDbm();
}
}else if (cellSignalStrength instanceof CellSignalStrengthCdma){
Log.e("tiwolf", "getMobileDbm: Cdma 信号强度为="+cellSignalStrength.getDbm() );
if (telephonyManager.getNetworkType()==TelephonyManager.NETWORK_TYPE_CDMA){
dbm= cellSignalStrength.getDbm();
}
}
}
}
}
return dbm;
}
先cellSignalStrength instanceof CellSignalStrengthGsm这些方法来分辨当前数据所属的网络,然后再判断当前的网络,选择与当前网络相符的数据。这个主要适合我当前做的3568,而且还是LTE的情况下。其他的没试过不知道。使用慎重
一开始参考了下:一种获取手机信号强度的方法_三火哥的博客-CSDN博客_getdbm
|