Android获取移动网络信号强度的方法
判断有没有 SIM 卡
获取移动网络的信号,一定要判断是否插了 SIM 卡,没插卡肯定是没法获取的
/** * 判断是否包含SIM卡 * * @return 状态 */ public static boolean hasSimCard(Context context) { TelephonyManager telMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); int simState = telMgr.getSimState(); boolean result = true; switch (simState) { case TelephonyManager.SIM_STATE_ABSENT: case TelephonyManager.SIM_STATE_UNKNOWN: result = false; // 没有SIM卡 break; } return result; }
获取信号强度
如果插了 SIM 卡,就可以通过下边方法来获取移动网络的信号强度(单位 dBM),使用的是 TelephonyManager 来监听
private void getMobileNetworkSignal() { if (!PhoneUtils.hasSimCard(mcontext)) { logger.info("getMobileNetworkSignal: no sim card"); return; } TelephonyManager mTelephonyManager = (TelephonyManager) BaseApplication.getAppContext().getSystemService(Context.TELEPHONY_SERVICE); if (mTelephonyManager != null) { mTelephonyManager.listen(new PhoneStateListener() { @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); int asu = signalStrength.getGsmSignalStrength(); int lastSignal = -113 + 2 * asu; if (lastSignal > 0) { mobileNetworkSignal = lastSignal + "dBm"; } logger.info("Current mobileNetworkSignal:" + lastSignal + " dBm"); } }, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS); } }
也可以添加网络类型的判断,来获取是何种网络的信号强度
int netWorkType = getNetWorkType(mContext); switch (netWorkType) { case NETWORKTYPE_WIFI: mTextView.setText("当前网络为wifi,信号强度为:" + gsmSignalStrength); break; case NETWORKTYPE_2G: mTextView.setText("当前网络为2G移动网络,信号强度为:" + gsmSignalStrength); break; case NETWORKTYPE_4G: mTextView.setText("当前网络为4G移动网络,信号强度为:" + gsmSignalStrength); break; case NETWORKTYPE_NONE: mTextView.setText("当前没有网络,信号强度为:" + gsmSignalStrength); break; case -1: mTextView.setText("当前网络错误,信号强度为:" + gsmSignalStrength); break; }
用到的获取网络类型的方法:
public static int getNetWorkType(Context context) { int mNetWorkType = -1; ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = manager.getActiveNetworkInfo(); if (networkInfo != null && networkInfo.isConnected()) { String type = networkInfo.getTypeName(); if (type.equalsIgnoreCase("WIFI")) { mNetWorkType = NETWORKTYPE_WIFI; } else if (type.equalsIgnoreCase("MOBILE")) { return isFastMobileNetwork(context) ? NETWORKTYPE_4G : NETWORKTYPE_2G; } } else { mNetWorkType = NETWORKTYPE_NONE;//没有网络 } return mNetWorkType; } /** * 判断网络类型 */ private static boolean isFastMobileNetwork(Context context) { TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE) { return true; } return false; }
最后添加必要权限即可
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
以上就是Android获取移动网络信号强度的方法的详细内容,更多关于Android获取网络信号强度的资料请关注脚本之家其它相关文章!
相关文章
小心!Listview结合EditText使用实例中遇到的那些坑
小心!Listview结合EditText使用实例中遇到的那些坑,解决EditText焦点丢失、保存数据以及滚动冲突的问题,感兴趣的小伙伴们可以参考一下2016-06-06Android复选框CheckBox与开关按钮Switch及单选按钮RadioButton使用示例详解
这篇文章主要介绍了Android复选框CheckBox与开关按钮Switch及单选按钮RadioButton使用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧2022-09-09Android使用ViewPager实现类似laucher左右拖动效果
这篇文章主要为大家详细介绍了Android使用ViewPager实现类似laucher左右拖动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-05-05android webview中使用Java调用JavaScript方法并获取返回值
这篇文章主要介绍了android webview中使用Java调用JavaScript方法并获取返回值,本文直接给出代码示例,需要的朋友可以参考下2015-03-03
最新评论