为了获得一个sim的信号强度,我正在这样做
int mSignalStrength = 0;
private final PhoneStateListener phoneListener = new PhoneStateListener() {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
mSignalStrength = signalStrength.getGsmSignalStrength();
mSignalStrength = (2 * mSignalStrength) - 113; // -> dBm
ApplicationConstants.signalStregth = mSignalStrength;
}
};
TelephonyManager
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneListener,
PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
答案 0 :(得分:0)
答案 1 :(得分:0)
获取双卡信号强度 我同时使用TelephonyManager和SubscriptionManager
fun getRegisteredCellInfo(cellInfos: MutableList<CellInfo>): ArrayList<CellInfo> {
val registeredCellInfos = ArrayList<CellInfo>()
if (cellInfos.isNotEmpty()) {
for (i in cellInfos.indices) {
if (cellInfos[i].isRegistered) {
registeredCellInfos.add(cellInfos[i])
}
}
}
return registeredCellInfos
}
fun getNetworkStrength(): Pair<Int, Int> {
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
}
} 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
}
} else {
strength1 = -1
}
}
}
strength2 = -2
}
}
}
}
Timber.i("final strenght sim1 $strength1 sim2 $strength2")
return Pair(strength1, strength2)
}