【Android】获取手机上所有电话卡的运营商和信号强度

本文介绍了一种在Android设备上获取4G和5G信号强度的方法,通过使用TelephonyManager API来获取所有SIM卡的信号强度信息,并根据信号级别评估信号质量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同一张卡的网络信号,有2G,3G,4G,5G等多种

这里主要实现4G和5G信号强度的获取,2G和3G的获取方式雷同

但由于现在已经不常用了,所以不再写多余的代码


	package com.android.architecture;
	
	import android.content.Context;
	import android.telephony.CellIdentityLte;
	import android.telephony.CellIdentityNr;
	import android.telephony.CellInfo;
	import android.telephony.CellInfoLte;
	import android.telephony.CellInfoNr;
	import android.telephony.CellSignalStrengthLte;
	import android.telephony.CellSignalStrengthNr;
	import android.telephony.TelephonyManager;
	
	import java.util.ArrayList;
	import java.util.List;
	
	@SuppressWarnings("all")
	public class SimInfo {
	
	    public String operatorCode;
	    public String operatorName;
	
	    public int signalLevel;
	    public String signalLevelName;
	
	    @Override
	    public String toString() {
	        return operatorName + " : " + signalLevelName;
	    }
	
	    public void setOperatorName() {
	        if (operatorCode.equals("46000"))
	            operatorName = "中国移动";
	        else if (operatorCode.equals("46002"))
	            operatorName = "中国移动";
	        else if (operatorCode.equals("46004"))
	            operatorName = "中国移动";
	        else if (operatorCode.equals("46007"))
	            operatorName = "中国移动";
	        else if (operatorCode.equals("46008"))
	            operatorName = "中国移动";
	        else if (operatorCode.equals("46003"))
	            operatorName = "中国电信";
	        else if (operatorCode.equals("46005"))
	            operatorName = "中国电信";
	        else if (operatorCode.equals("46011"))
	            operatorName = "中国电信";
	        else if (operatorCode.equals("46001"))
	            operatorName = "中国联通";
	        else if (operatorCode.equals("46006"))
	            operatorName = "中国联通";
	        else if (operatorCode.equals("46009"))
	            operatorName = "中国联通";
	        else if (operatorCode.equals("46020"))
	            operatorName = "中国铁通";
	        else
	            operatorName = "其它运营商";
	    }
	
	    public void setSignalLevelName() {
	        if (signalLevel == 4)
	            signalLevelName = "好";
	        else if (signalLevel == 3)
	            signalLevelName = "中";
	        else if (signalLevel == 2)
	            signalLevelName = "差";
	        else if (signalLevel == 1)
	            signalLevelName = "极差";
	        else
	            signalLevelName = "无信号";
	    }
	
	    //获取所有SIM卡的信号强度信息
	    public static List<SimInfo> getAllSimInfo(Context context) {
	        TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
	        List<SimInfo> simInfoList = new ArrayList();
	        List<CellInfo> cellInfoList = telephonyManager.getAllCellInfo();
	        for (CellInfo cellInfo : cellInfoList) {
	            if (!cellInfo.isRegistered())
	                continue;
	            //4G
	            if (cellInfo instanceof CellInfoLte) {
	                CellInfoLte lte = (CellInfoLte) cellInfo;
	                CellIdentityLte identity = lte.getCellIdentity();
	                CellSignalStrengthLte strength = lte.getCellSignalStrength();
	                SimInfo simInfo = new SimInfo();
	                simInfo.operatorCode = identity.getMobileNetworkOperator();
	                simInfo.signalLevel = strength.getLevel();
	                simInfo.setOperatorName();
	                simInfo.setSignalLevelName();
	                simInfoList.add(simInfo);
	            }
	            //5G
	            if (cellInfo instanceof CellInfoNr) {
	                CellInfoNr nr = (CellInfoNr) cellInfo;
	                CellIdentityNr identity = (CellIdentityNr) nr.getCellIdentity();
	                CellSignalStrengthNr strength = (CellSignalStrengthNr) nr.getCellSignalStrength();
	                SimInfo simInfo = new SimInfo();
	                simInfo.operatorCode = "" + identity.getMccString() + identity.getMncString();
	                simInfo.signalLevel = strength.getLevel();
	                simInfo.setOperatorName();
	                simInfo.setSignalLevelName();
	                simInfoList.add(simInfo);
	            }
	        }
	        return simInfoList;
	    }
	}



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值