Android——获取手机当前信号强度(dbm/asu值)
16lz
2021-01-23
/** * 得到当前的手机蜂窝网络信号强度 * 获取LTE网络和3G/2G网络的信号强度的方式有一点不同, * LTE网络强度是通过解析字符串获取的, * 3G/2G网络信号强度是通过API接口函数完成的。 * asu 与 dbm 之间的换算关系是 dbm=-113 + 2*asu */ public void getCurrentNetDBM(Context context) { final TelephonyManager tm = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); PhoneStateListener mylistener = new PhoneStateListener(){// @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); String signalInfo = signalStrength.toString(); String[] params = signalInfo.split(" "); if(tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE){ //4G网络 最佳范围 >-90dBm 越大越好 int Itedbm = Integer.parseInt(params[9]); setDBM(Itedbm+""); }else if(tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA || tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPA || tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSUPA || tm.getNetworkType() == TelephonyManager.NETWORK_TYPE_UMTS){ //3G网络最佳范围 >-90dBm 越大越好 ps:中国移动3G获取不到 返回的无效dbm值是正数(85dbm) //在这个范围的已经确定是3G,但不同运营商的3G有不同的获取方法,故在此需做判断 判断运营商与网络类型的工具类在最下方 String yys = IntenetUtil.getYYS(getApplication());//获取当前运营商 if (yys=="中国移动") { setDBM(0+"");//中国移动3G不可获取,故在此返回0}else if (yys=="中国联通") {int cdmaDbm = signalStrength.getCdmaDbm(); setDBM(cdmaDbm+"");}else if (yys=="中国电信") {int evdoDbm = signalStrength.getEvdoDbm(); setDBM(evdoDbm+"");} }else{ //2G网络最佳范围>-90dBm 越大越好 int asu = signalStrength.getGsmSignalStrength(); int dbm = -113 + 2*asu; setDBM(dbm+""); } } }; //开始监听 tm.listen(mylistener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); }
更多相关文章
- Android双机(网络和USB)调试及其完美ROOT
- Android如何获取网络连接状态及怎样调用网络配置界面
- Android 网络状态实时监测
- android判断当前网络状态,eth wifi pppoe等
- Android获取当前网络状态和获取当前设备网络ip地址
- network: android 网络判断
- android网络优化