Android獲取移動(dòng)網(wǎng)絡(luò)信號(hào)強(qiáng)度的方法
判斷有沒有 SIM 卡
獲取移動(dòng)網(wǎng)絡(luò)的信號(hào),一定要判斷是否插了 SIM 卡,沒插卡肯定是沒法獲取的
/** * 判斷是否包含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; // 沒有SIM卡 break; } return result; }
獲取信號(hào)強(qiáng)度
如果插了 SIM 卡,就可以通過下邊方法來獲取移動(dòng)網(wǎng)絡(luò)的信號(hào)強(qiáng)度(單位 dBM),使用的是 TelephonyManager 來監(jiān)聽
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ò)類型的判斷,來獲取是何種網(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)前沒有網(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;//沒有網(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)聽的方法
- Android提高之模擬信號(hào)示波器的實(shí)現(xiàn)
- android wifi信號(hào)強(qiáng)度等級(jí)區(qū)分的修改介紹
相關(guān)文章
Android編程之藍(lán)牙測(cè)試實(shí)例
這篇文章主要介紹了Android編程之藍(lán)牙測(cè)試,較為詳細(xì)的分析了Android藍(lán)牙測(cè)試的相關(guān)運(yùn)行環(huán)境與調(diào)試技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04Android開發(fā)實(shí)現(xiàn)ScrollView中嵌套兩個(gè)ListView的方法
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)ScrollView中嵌套兩個(gè)ListView的方法,結(jié)合實(shí)例形式分析了Android ScrollView中嵌套兩個(gè)ListView的操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-11-11使用adb命令向Android模擬器中導(dǎo)入通訊錄聯(lián)系人的方法
這篇文章主要介紹了使用adb命令向Android模擬器中導(dǎo)入通訊錄聯(lián)系人的方法,實(shí)例分析了導(dǎo)入通訊錄存儲(chǔ)文件的技巧,需要的朋友可以參考下2015-01-01Android ViewFlipper的詳解及實(shí)例
這篇文章主要介紹了Android ViewFlipper的詳解及實(shí)例的相關(guān)資料,通過本文希望能幫助大家理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08Android自定義相機(jī)界面的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android自定義相機(jī)界面的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11Android開發(fā)中模仿qq列表信息滑動(dòng)刪除功能
這篇文章主要介紹了Android開發(fā)中模仿qq列表信息滑動(dòng)刪除功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01Android編程中Tween動(dòng)畫和Frame動(dòng)畫實(shí)例分析
這篇文章主要介紹了Android編程中Tween動(dòng)畫和Frame動(dòng)畫,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android中Tween動(dòng)畫和Frame動(dòng)畫的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-12-12