Andoid 获取信号强度

本文介绍如何通过Android系统API获取并解析手机的网络信号强度,包括不同运营商的网络类型标识与信号强度显示。

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

  1.获得TelephoneManager: 

TelephonyManager telephoneManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);


  2.获得PhoneStateListener:

final int type = telephoneManager.getNetworkType();
PhoneStateListener phoneStateListener = new PhoneStateListener() {

			@Override
			public void onSignalStrengthsChanged(SignalStrength signalStrength) {
				// TODO Auto-generated method stub
				super.onSignalStrengthsChanged(signalStrength);
				StringBuffer sb = new StringBuffer();
				String strength = String.valueOf(signalStrength
						.getGsmSignalStrength());
				if (type == TelephonyManager.NETWORK_TYPE_UMTS
						|| type == TelephonyManager.NETWORK_TYPE_HSDPA) {
					sb.append("联通3g").append("信号强度:").append(strength);
				} else if (type == TelephonyManager.NETWORK_TYPE_GPRS
						|| type == TelephonyManager.NETWORK_TYPE_EDGE) {
					sb.append("移动或者联通2g").append("信号强度:").append(strength);
				}else if(type==TelephonyManager.NETWORK_TYPE_CDMA){
					sb.append("电信2g").append("信号强度:").append(strength);
				}else if(type==TelephonyManager.NETWORK_TYPE_EVDO_0
						||type==TelephonyManager.NETWORK_TYPE_EVDO_A){
					sb.append("电信3g").append("信号强度:").append(strength);
					
				}else{
					sb.append("非以上信号").append("信号强度:").append(strength);
				}

				toast.setText(sb.toString());
				toast.show();
			}

		};

 对于上面代码的解释:

      通过telePhoneManager获得网络类型,源码中给出的网络类型有以下:

    /** Network type is unknown */
    public static final int NETWORK_TYPE_UNKNOWN = 0;
    /** Current network is GPRS */
    public static final int NETWORK_TYPE_GPRS = 1;
    /** Current network is EDGE */
    public static final int NETWORK_TYPE_EDGE = 2;
    /** Current network is UMTS */
    public static final int NETWORK_TYPE_UMTS = 3;
    /** Current network is CDMA: Either IS95A or IS95B*/
    public static final int NETWORK_TYPE_CDMA = 4;
    /** Current network is EVDO revision 0*/
    public static final int NETWORK_TYPE_EVDO_0 = 5;
    /** Current network is EVDO revision A*/
    public static final int NETWORK_TYPE_EVDO_A = 6;
    /** Current network is 1xRTT*/
    public static final int NETWORK_TYPE_1xRTT = 7;
    /** Current network is HSDPA */
    public static final int NETWORK_TYPE_HSDPA = 8;
    /** Current network is HSUPA */
    public static final int NETWORK_TYPE_HSUPA = 9;
    /** Current network is HSPA */
    public static final int NETWORK_TYPE_HSPA = 10;
    /** Current network is iDen */
    public static final int NETWORK_TYPE_IDEN = 11;
    /** Current network is EVDO revision B*/
    public static final int NETWORK_TYPE_EVDO_B = 12;


在中国,联通3g为UMTS或者HSDPA,电信的3g为EVDO,移动和联通的2g为GPRS或者EGDE,电信的2G为CMDA

onSignalStrengthsChanged()方法,当信号改变时回调

 

 3.注册监听到telephoneManager:

telephoneManager.listen(phoneStateListener,
				PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);


 4.在manifest中获得权限

<uses-permission android:name="android.permission.CHANGE_NEWWORK_STATE"/>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值