借鉴了其他人的一些方法,但是在中间发现LTE的情况下。使用getDbm()方法是获取不到信号强度的。需要另外一个Rssi。
具体如下,大部分还是借鉴别人的:
/**
* 获取手机信号强度,需添加权限 android.permission.ACCESS_COARSE_LOCATION <br>
* API要求不低于17 <br>
*
* @return 当前手机主卡信号强度, 单位 dBm(-1是默认值,表示获取失败)
*/
@RequiresApi(api = Build.VERSION_CODES.Q)
@SuppressLint("MissingPermission")
public static int getMobileDbm(Context context) {
int dbm = -1;
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
List<CellInfo> cellInfoList;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
cellInfoList = tm.getAllCellInfo();
Log.e("tiwolf", "getMobileDbm: 信号列表="+(cellInfoList!=null?cellInfoList.size():-1));
if (null != cellInfoList)
{
for (CellInfo cellInfo : cellInfoList)
{
Log.e("tiwolf", "getMobileDbm: 查看信号是否注册="+cellInfo.isRegistered());
if (cellInfo.isRegistered()){
if (cellInfo instanceof CellInfoGsm)
{
CellSignalStrengthGsm cellSignalStrengthGsm = ((CellInfoGsm)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthGsm.getDbm();
Log.e("tiwolf", "getMobileDbm: Gsm信号===="+cellSignalStrengthGsm.getDbm() );
}
else if (cellInfo instanceof CellInfoCdma)
{
CellSignalStrengthCdma cellSignalStrengthCdma =
((CellInfoCdma)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthCdma.getDbm();
Log.e("tiwolf", "getMobileDbm: Cdma信号===="+cellSignalStrengthCdma.getDbm() );
}
else if (cellInfo instanceof CellInfoWcdma)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
{
CellSignalStrengthWcdma cellSignalStrengthWcdma =
((CellInfoWcdma)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthWcdma.getDbm();
Log.e("tiwolf", "getMobileDbm: Wcdma信号===="+cellSignalStrengthWcdma.getDbm() );
}
}
else if (cellInfo instanceof CellInfoLte)
{
CellSignalStrengthLte cellSignalStrengthLte = ((CellInfoLte)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthLte.getRssi();
Log.e("tiwolf", "getMobileDbm: Lte信号===="+cellSignalStrengthLte.getRssi() );
}
}
}
}
}
return dbm;
}
先检查当前是否isRegistered,这个一定要筛选,不然得到的有可能是一大长串数字。然后再将getDbm()方法更改下就可以了。这个主要适合我当前做的3568,而且还是LTE的情况下。其他的没试过不知道。使用慎重
主要参考:一种获取手机信号强度的方法_三火哥的博客-CSDN博客_getdbm