/**
* 强制检查权限 android.permission.ACCESS_COARSE_LOCATION,上层未给权限时返回-1表示获取失败
* API >= 18
*
* @return 当前手机主卡信号强度, 单位 dBm(-1是默认值,表示获取失败)
*/
public static int getMobileDbm() {
Context context = ContextGetter.applicationContext();
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) {
if (context.checkPermission(Manifest.permission.ACCESS_COARSE_LOCATION, Process.myPid(), Process.myUid()) != PackageManager.PERMISSION_GRANTED) {
return dbm;
}
cellInfoList = tm.getAllCellInfo();
if (null != cellInfoList) {
for (CellInfo cellInfo : cellInfoList) {
if (cellInfo instanceof CellInfoGsm) {
CellSignalStrengthGsm cellSignalStrengthGsm = ((CellInfoGsm) cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthGsm.getDbm();
} else if (cellInfo instanceof CellInfoCdma) {
CellSignalStrengthCdma cellSignalStrengthCdma =
((CellInfoCdma) cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthCdma.getDbm();
} else if (cellInfo instanceof CellInfoLte) {
CellSignalStrengthLte cellSignalStrengthLte = ((CellInfoLte) cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthLte.getDbm();
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
if (cellInfo instanceof CellInfoWcdma) {
CellSignalStrengthWcdma cellSignalStrengthWcdma =
((CellInfoWcdma) cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthWcdma.getDbm();
}
}
}
}
}
return dbm;
}
Android获取手机信号强度
最新推荐文章于 2025-11-01 12:43:02 发布
本文介绍了一种在Android设备上获取手机信号强度的方法,通过使用TelephonyManager类和ACCESS_COARSE_LOCATION权限,可以获取到主卡的信号强度,单位为dBm。代码适用于API等级大于等于18的设备。
689

被折叠的 条评论
为什么被折叠?



