因为业务需要,获取到手机主板的信号强度,包括WiFi,4G,2G。来验证当前主板模块是否是因为信号不好而导致问题,我去网上查询了几遍,将一些文章结合起来。最后获取到相关数据。以下是相关的操作步骤
1.加权限
<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"/>
2.实例化TelephonyManager,建立起PhoneStatListener监听(主要是带SIM卡的状态监听),再注册一个NetWorkBroadCastReceiver监听。
//获取telephonyManager mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); //开始监听 mListener = new PhoneStatListener(); mNetWorkBroadCastReciver = new NetWorkBroadCastReciver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); intentFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); intentFilter.addAction(WifiManager.RSSI_CHANGED_ACTION); registerReceiver(mNetWorkBroadCastReciver, intentFilter);
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);
/** * 观察手机带SIM卡时的信号强度 */ private class PhoneStatListener extends PhoneStateListener { //获取信号强度 @Override public void onSignalStrengthsChanged(SignalStrength signalStrength) { super.onSignalStrengthsChanged(signalStrength); signal=signalStrength; //网络信号改变时,获取网络信息 getNetWorkInfo(); } }
//接收网络状态改变的广播 class NetWorkBroadCastReciver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { getNetWorkInfo(); } }
/** * 获取网络的信息 */ private void getNetWorkInfo() { ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo info = connectivityManager.getActiveNetworkInfo(); if (info != null && info.isAvailable()) { switch (info.getType()) { case ConnectivityManager.TYPE_WIFI: //wifi WifiManager manager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo connectionInfo = manager.getConnectionInfo(); int rssi = connectionInfo.getRssi(); mTextView.setText("当前为wifi网络,信号强度=" + rssi); break; case ConnectivityManager.TYPE_MOBILE: //移动网络,可以通过TelephonyManager来获取具体细化的网络类型 String netWorkStatus = isFastMobileNetwork() ? "4G网络" : "2G网络"; if (isFastMobileNetwork()){ try { if (signal==null){ Log.e("tiwolf", "getNetWorkInfo: signal为空" ); return; } Method method=signal.getClass().getMethod("getDbm"); mGsmSignalStrength= (int) method.invoke(signal); if(mGsmSignalStrength>-90){ Log.e("tiwolf", "getNetWorkInfo: 信号强度强" ); }else { Log.e("tiwolf", "getNetWorkInfo: 信号强度弱" ); } } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } }else { //获取网络信号强度 //获取0-4的5种信号级别,越大信号越好,但是api23开始才能用 // int level = signalStrength.getLevel(); if (signal==null){ Log.e("tiwolf", "getNetWorkInfo: signal为空" ); return; } mGsmSignalStrength = signal.getGsmSignalStrength(); } mTextView.setText("当前为" + netWorkStatus + ",信号强度=" + mGsmSignalStrength); Log.e("tiwolf", "当前为" + netWorkStatus + ",信号强度=" + mGsmSignalStrength ); break; } } else { mTextView.setText("没有可用网络"); } }
最后结束取消监听,取消注册
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_NONE);
unregisterReceiver(mNetWorkBroadCastReciver);
大体的就是这样子,后面有文档上传到csdn,有需要的可以去下载