Android獲取移動(dòng)網(wǎng)絡(luò)信號(hào)強(qiáng)度的方法
判斷有沒(méi)有 SIM 卡
獲取移動(dòng)網(wǎng)絡(luò)的信號(hào),一定要判斷是否插了 SIM 卡,沒(méi)插卡肯定是沒(méi)法獲取的
/**
* 判斷是否包含SIM卡
*
* @return 狀態(tài)
*/
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; // 沒(méi)有SIM卡
break;
}
return result;
}
獲取信號(hào)強(qiáng)度
如果插了 SIM 卡,就可以通過(guò)下邊方法來(lái)獲取移動(dòng)網(wǎng)絡(luò)的信號(hào)強(qiáng)度(單位 dBM),使用的是 TelephonyManager 來(lái)監(jiān)聽(tīng)
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);
}
}
也可以添加網(wǎng)絡(luò)類型的判斷,來(lái)獲取是何種網(wǎng)絡(luò)的信號(hào)強(qiáng)度
int netWorkType = getNetWorkType(mContext);
switch (netWorkType) {
case NETWORKTYPE_WIFI:
mTextView.setText("當(dāng)前網(wǎng)絡(luò)為wifi,信號(hào)強(qiáng)度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_2G:
mTextView.setText("當(dāng)前網(wǎng)絡(luò)為2G移動(dòng)網(wǎng)絡(luò),信號(hào)強(qiáng)度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_4G:
mTextView.setText("當(dāng)前網(wǎng)絡(luò)為4G移動(dòng)網(wǎng)絡(luò),信號(hào)強(qiáng)度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_NONE:
mTextView.setText("當(dāng)前沒(méi)有網(wǎng)絡(luò),信號(hào)強(qiáng)度為:" + gsmSignalStrength);
break;
case -1:
mTextView.setText("當(dāng)前網(wǎng)絡(luò)錯(cuò)誤,信號(hào)強(qiáng)度為:" + gsmSignalStrength);
break;
}
用到的獲取網(wǎng)絡(luò)類型的方法:
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;//沒(méi)有網(wǎng)絡(luò)
}
return mNetWorkType;
}
/**
* 判斷網(wǎng)絡(luò)類型
*/
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;
}
最后添加必要權(quán)限即可
<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獲取移動(dòng)網(wǎng)絡(luò)信號(hào)強(qiáng)度的方法的詳細(xì)內(nèi)容,更多關(guān)于Android獲取網(wǎng)絡(luò)信號(hào)強(qiáng)度的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android9.0 SystemUI 網(wǎng)絡(luò)信號(hào)欄定制修改的流程解析
- Android自定義View展示W(wǎng)ifi信號(hào)強(qiáng)弱指示方法示例
- Android Init進(jìn)程對(duì)信號(hào)的處理流程詳細(xì)介紹
- Android手機(jī)信號(hào)強(qiáng)度檢測(cè)詳細(xì)介紹
- android 獲取手機(jī)GSM/CDMA信號(hào)信息,并獲得基站信息的方法
- Android 模擬信號(hào)示波器示例代碼
- Android獲取當(dāng)前已連接的wifi信號(hào)強(qiáng)度的方法
- Android實(shí)現(xiàn)信號(hào)強(qiáng)度監(jiān)聽(tīng)的方法
- Android提高之模擬信號(hào)示波器的實(shí)現(xiàn)
- android wifi信號(hào)強(qiáng)度等級(jí)區(qū)分的修改介紹
相關(guān)文章
Android基于TextView屬性android:ellipsize實(shí)現(xiàn)跑馬燈效果的方法
這篇文章主要介紹了Android基于TextView屬性android:ellipsize實(shí)現(xiàn)跑馬燈效果的方法,涉及Android跑馬燈效果所涉及的TextView相關(guān)屬性與使用方法,需要的朋友可以參考下2016-08-08
Android Dialog 對(duì)話框詳解及示例代碼
本文主要介紹Android Dialog,這里詳細(xì)介紹Android Dialog的基本使用方法,并提供了示例代碼和實(shí)現(xiàn)效果圖,有需要的小伙伴可以參考下2016-08-08
Android 解決sqlite無(wú)法創(chuàng)建新表的問(wèn)題
這篇文章主要介紹了Android 解決sqlite無(wú)法創(chuàng)建新表的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
用原生VideoView進(jìn)行全屏播放時(shí)的問(wèn)題
本篇文章主要介紹了用原生VideoView進(jìn)行全屏播放時(shí)的問(wèn)題,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01
Android 中啟動(dòng)自己另一個(gè)程序的activity如何實(shí)現(xiàn)
這篇文章主要介紹了Android 中啟動(dòng)自己另一個(gè)程序的activity如何實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2017-04-04
Android判斷應(yīng)用程序退到后臺(tái)的方法(示例代碼)
判斷手機(jī)是否退到后臺(tái),這是我們?cè)贏ndroid開發(fā)中實(shí)現(xiàn)一些功能時(shí),經(jīng)常會(huì)考慮的問(wèn)題,這篇文章主要介紹了android判斷應(yīng)用程序退到后臺(tái)的方法,需要的朋友可以參考下2023-03-03
簡(jiǎn)單實(shí)現(xiàn)Android刮刮卡效果
這篇文章主要教大家如何簡(jiǎn)單的實(shí)現(xiàn)Android刮刮卡效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07

