因为业务需要,获取到手机主板的信号强度,包括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,有需要的可以去下载
版权声明:本文为xiaoyifeishuang1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。