作者:走ln方 | 来源:互联网 | 2023-09-06 15:02
使用电话状态监听器,我正在获取默认的SIM信号强度,如何确定第二个SIM信号强度。
请帮助我找出这个问题
我也使用了Telemetry manager
,但我没有获得第二模拟信号强度
val phonestateListener: PhOnestateListener= object : PhonestateListener() {
override fun onServiceStateChanged(serviceState: ServiceState) {
Timber.d("Current cell state : ${serviceState.state}")
}
override fun onSignalStrengthsChanged(signalStrength: SignalStrength)
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Timber.d("Current cell signal: ${signalStrength.level}")
} else {
Timber.d("Current cell signal:${signalStrength.gsmSignalStrength}")
}
}
}
telephOnyManager= getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
telephonyManager.listen(phonestateListener,PhonestateListener.LISTEN_SERVICE_STATE or PhonestateListener.LISTEN_SIGNAL_STRENGTHS)
以上问题我都得到了解决方案
fun getRegisteredCellInfo(cellInfos: MutableList): ArrayList {
val registeredCellInfos = ArrayList()
if (cellInfos.isNotEmpty()) {
for (i in cellInfos.indices) {
if (cellInfos[i].isRegistered) {
registeredCellInfos.add(cellInfos[i])
}
}
}
return registeredCellInfos
}
fun getNetworkStrength(): Pair {
var strength1 = -1
var strength2 = -1
val manager = getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val telephOnyManager= applicationContext.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
if (telephonyManager.allCellInfo != null) {
val allCellinfo = telephonyManager.allCellInfo
val activeSubscriptiOnInfoList= manager.activeSubscriptionInfoList
val regCellInfo= getRegisteredCellInfo(allCellinfo)
activeSubscriptionInfoList.forEachIndexed { Subindex,subs ->
if (activeSubscriptionInfoList.size >= 2) {
if (regCellInfo.size >= 2) {
if (subs.simSlotIndex == 0) {
if (subs.carrierName != "No service") {
strength1 = when (val info1 = regCellInfo[0]) {
is CellInfoLte -> info1.cellSignalStrength.dbm
is CellInfoGsm -> info1.cellSignalStrength.dbm
is CellInfoCdma -> info1.cellSignalStrength.dbm
is CellInfoWcdma -> info1.cellSignalStrength.dbm
else -> 0
}
Timber.i("subs $subs")
Timber.i("sim1 ${subs.carrierName} ${subs.mnc} $strength1")
} else {
strength1 = -1
}
} else if (subs.simSlotIndex == 1) {
if (subs.carrierName != "No service") {
strength2 = when (val info2 = regCellInfo[1]) {
is CellInfoLte -> info2.cellSignalStrength.dbm
is CellInfoGsm -> info2.cellSignalStrength.dbm
is CellInfoCdma -> info2.cellSignalStrength.dbm
is CellInfoWcdma -> info2.cellSignalStrength.dbm
else -> 0
}
Timber.i("sim2 ${subs.carrierName} $strength2")
} else {
strength2 = -1
}
}
}
}else if(activeSubscriptionInfoList.size == 1)
{
if(regCellInfo.size >= 1) {
if (subs.simSlotIndex == 0) {
if (subs.carrierName != "No service") {
strength1 = when (val info1 = regCellInfo[0]) {
is CellInfoLte -> info1.cellSignalStrength.level
is CellInfoGsm -> info1.cellSignalStrength.level
is CellInfoCdma -> info1.cellSignalStrength.level
is CellInfoWcdma -> info1.cellSignalStrength.level
else -> 0
}
Timber.i("subs $subs")
Timber.i("sim1 ${subs.carrierName} ${subs.mnc} $strength1")
} else {
strength1 = -1
}
}
}
strength2 = -2
}
}
}
}
Timber.i("final strenght sim1 $strength1 sim2 $strength2")
return Pair(strength1,strength2)
}