gpt4 book ai didi

java - 如何在android中监听双卡信号电平?

转载 作者:行者123 更新时间:2023-12-02 05:45:53 25 4
gpt4 key购买 nike

我正在开发 Android 启动器应用程序,并且希望在我的应用程序中支持双 SIM 卡信号电平栏。

package com.example.sms;

import android.content.Context;
import android.os.Bundle;
import android.telephony.PhoneStateListener;
import android.telephony.SignalStrength;
import android.telephony.TelephonyManager;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {
private TextView tvSim1SignalLevel, tvSim2SignalLevel;
private TelephonyManager telephonyManager;
private SignalLevelListener signalLevelListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tvSim1SignalLevel = findViewById(R.id.tvSim1SignalLevel);
tvSim2SignalLevel = findViewById(R.id.tvSim2SignalLevel);

signalLevelListener = new SignalLevelListener();
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(signalLevelListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}

public class SignalLevelListener extends PhoneStateListener {
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);

tvSim1SignalLevel.setText(String.valueOf(signalStrength.getLevel()));
}
}

@Override
protected void onDestroy() {
super.onDestroy();
telephonyManager.listen(signalLevelListener, PhoneStateListener.LISTEN_NONE);
}
}

我仅获得默认 SIM 信号级别,如何获得第二个 SIM 信号级别(如状态栏 SIM 信号级别图标所示)?

最佳答案

使用遥测信号的双 SIM 信号

  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
}

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)
}

关于java - 如何在android中监听双卡信号电平?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com