Android獲取移動(dòng)網(wǎng)絡(luò)信號(hào)強(qiáng)度的方法
獲取移動(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)聽
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() {@Overridepublic 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)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. nestjs實(shí)現(xiàn)圖形校驗(yàn)和單點(diǎn)登錄的示例代碼2. html小技巧之td,div標(biāo)簽里內(nèi)容不換行3. 以PHP代碼為實(shí)例詳解RabbitMQ消息隊(duì)列中間件的6種模式4. laravel ajax curd 搜索登錄判斷功能的實(shí)現(xiàn)5. python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊6. Python 如何將integer轉(zhuǎn)化為羅馬數(shù)(3999以內(nèi))7. 將properties文件的配置設(shè)置為整個(gè)Web應(yīng)用的全局變量實(shí)現(xiàn)方法8. python實(shí)現(xiàn)自動(dòng)化辦公郵件合并功能9. Echarts通過(guò)dataset數(shù)據(jù)集實(shí)現(xiàn)創(chuàng)建單軸散點(diǎn)圖10. css進(jìn)階學(xué)習(xí) 選擇符
