Android12以上獲取裝置網路訊號資料

清靜發表於2024-01-17

公司有很多物聯網裝置,關鍵的訊號引數是RSRP,總有些地方訊號差,不適合安裝。所以讓開發一款測訊號的app,用於現場的同事在判定是否符合裝置訊號條件,再考慮安裝裝置。

由於與開發過程中使用的是Android sdk33,版本太高,網上搜到的很多舊的方法已經棄用,用起來也比較麻煩。

自己搗鼓了半天使用的新方法,話不多說直接上我的程式碼

@RequiresApi(Build.VERSION_CODES.S)
fun getMobileNetworkSignal(context: Context): NetworkSignal {
  val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
  //獲取運營商
  val simOperatorName = telephonyManager.simOperatorName
  //獲取當前網路資訊
  val signalStrength = telephonyManager.signalStrength?.cellSignalStrengths
  // val signalStrengthGsm = telephonyManager.signalStrength?.getCellSignalStrengths(CellSignalStrengthGsm::class.java)
  // val signalStrengthLte = telephonyManager.signalStrength?.getCellSignalStrengths(CellSignalStrengthLte::class.java)
  // val signalStrengthWcdma = telephonyManager.signalStrength?.getCellSignalStrengths(CellSignalStrengthWcdma::class.java)
  networkSignal = NetworkSignal(signalStrength.toString(), simOperatorName)
  return networkSignal
}

1、顯示獲取TelephonyManager例項,

2、直接調方法telephonyManager.simOperatorName,獲取運營商
3、telephonyManager.signalStrength?.cellSignalStrengths,返回正在使用的網路資訊列表
4、至於telephonyManager.signalStrength?.getCellSignalStrengths(CellSignalStrengthGsm::class.java),則是獲取Gsm這種通訊協議的網路資訊,沒有的話就返回的是空列表,
也可以指定其他通訊,有下面這些

最後附上執行效果圖

可以看到RSRP是-98,符合NB裝置訊號需求。

相關文章