出于項(xiàng)目需求破婆,需要獲取到手機(jī)信號強(qiáng)度涮总。本人不才,以前都是采用toString()的方法祷舀,然后截取瀑梗,得到強(qiáng)度烹笔,但發(fā)現(xiàn)很多機(jī)型都不適合∨桌觯苦苦在API中搜尋谤职,結(jié)果都不是很理想。最后在Stackoverflow上發(fā)現(xiàn)了一個(gè)方法亿鲜,試之允蜈,發(fā)現(xiàn)大部分機(jī)型適合,故寫成方法狡门,以便后續(xù)需要陷寝。但此方法還不是很全面,無法保證所有機(jī)型都適合其馏,若各位大蝦有更好的方法凤跑,還望不吝賜教。
/**
* 獲取手機(jī)信號強(qiáng)度叛复,需添加權(quán)限 android.permission.ACCESS_COARSE_LOCATION <br>
* API要求不低于17 <br>
*
* @return 當(dāng)前手機(jī)主卡信號強(qiáng)度,單位 dBm(-1是默認(rèn)值仔引,表示獲取失敗)
*/
public 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();
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 CellInfoWcdma)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2)
{
CellSignalStrengthWcdma cellSignalStrengthWcdma =
((CellInfoWcdma)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthWcdma.getDbm();
}
}
else if (cellInfo instanceof CellInfoLte)
{
CellSignalStrengthLte cellSignalStrengthLte = ((CellInfoLte)cellInfo).getCellSignalStrength();
dbm = cellSignalStrengthLte.getDbm();
}
}
}
}
return dbm;
}