最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android手機信號強度檢測詳細介紹

 更新時間:2016年11月17日 14:35:34   作者:skxy  
這篇文章主要介紹了Android手機信號強度檢測的相關(guān)資料,android定義了2種信號單位:dBm和asu。具體兩種的關(guān)系本文給大家介紹非常詳細,需要的朋友可以參考下

最近到處在跑著找工作,難免在面試過程中遇到這樣那樣的問題,記得最清楚一次在面試過程中被問到,當手機處于弱網(wǎng)狀態(tài)下,如何處理,如何監(jiān)聽網(wǎng)絡(luò)信號強度變化。但是真是蒙了,回答的亂七八糟,思路一點都不明確。今天小編在這里帶領(lǐng)大家了解下關(guān)于手機信號強度的相關(guān)幾個概念。

Android手機信號強度介紹

android定義了2種信號單位:dBm和asu。它們之間的關(guān)系是:dBm =-113+2asu,這是google給android手機定義的特有信號單位。例如,我的信號強度為-53dBm,則對應(yīng)30asu,因為-53 = -113 + (230) 。

詳細介紹兩者:

asu:alone signal unit 獨立信號單元,是一種模擬信號。ASU僅僅代表手機將它的位置傳遞給附近的信號塔的速率。它和dBm測量的是一樣的東西,但是是以一種更加線性的方式來表示。
dBm:是一個表示功率絕對值的值(也可以認為是以1mW功率為基準的一個比值),計算公式為:10log(功率值/1mw)。

[例] 如果功率P為1mw,折算為dBm后為0dBm。

[例] 對于0.01mW的功率,按dBm單位進行折算后的值應(yīng)為: 10log(0.01/1)=-20dBm。

這個數(shù)值越大,表明信號越好。由于手機信號強度一般較小,折算成為dBm一般都是負數(shù)。
中國移動的規(guī)范規(guī)定,手機接收電平>=(城市取-90dBm;鄉(xiāng)村取-94dBm) 時,則滿足覆蓋要求,

也就是說此處無線信號強度滿足覆蓋要求.-67dBm要比-90dBm信號要強20多個dB,

那么它在打電話接通成功率和通話過程中的話音質(zhì)量都會好的多。再引入一個相關(guān)概念dB。

dB:是一個表征相對值的值,純粹的比值,只表示兩個量的相對大小關(guān)系,沒有單位,當考慮甲的功率相比于乙功率大或小多少個dB時,按下面的計算公式:10log(甲功率/乙功率),如果采用兩者的電壓 比計算,要用20log(甲電壓/乙電壓)。

[例] 甲功率比乙功率大一倍,那么10lg(甲功率/乙功率)=10lg2=3dB,即甲的功率比乙的功率大3 dB。反之,如果甲的功率是乙的功率的一半,則甲的功率比乙的功率小3 dB。

總結(jié):dBm是負數(shù),越接近0信號強度越高,信號越好,但不可能為0。asu為正數(shù),值越大信號越好。dB是兩個量之間的比值,表示兩個量間的相對大小,而dBm則是表示功率絕對大小的值。

關(guān)于對數(shù)運算,不記得的自行復(fù)習(xí)一下了。

下面再來了解一下網(wǎng)絡(luò)類型吧,還是很多的,不過在國內(nèi)只要了解國內(nèi)三大運營商的網(wǎng)絡(luò)類型大概就可以了。

電信

2G CDMA
3G CDMA2000
4G TD-LTE,F(xiàn)DD-LTE

移動

2G GSM
3G TD-SCDMA
4G TD-LTE,F(xiàn)DD-LTE

聯(lián)通

2G GSM
3G WCDMA
4G TD-LTE,F(xiàn)DD-LTE

而谷歌API給我們提供的有19種類型,在TelephonyManager類中定義,具體如下

/** Network type is unknown */
public static final int NETWORK_TYPE_UNKNOWN = 0;
/** Current network is GPRS */
public static final int NETWORK_TYPE_GPRS = 1;
/** Current network is EDGE */
public static final int NETWORK_TYPE_EDGE = 2;
/** Current network is UMTS */
public static final int NETWORK_TYPE_UMTS = 3;
/** Current network is CDMA: Either IS95A or IS95B*/
public static final int NETWORK_TYPE_CDMA = 4;
/** Current network is EVDO revision 0*/
public static final int NETWORK_TYPE_EVDO_0 = 5;
/** Current network is EVDO revision A*/
public static final int NETWORK_TYPE_EVDO_A = 6;
/** Current network is 1xRTT*/
public static final int NETWORK_TYPE_1xRTT = 7;
/** Current network is HSDPA */
public static final int NETWORK_TYPE_HSDPA = 8;
/** Current network is HSUPA */
public static final int NETWORK_TYPE_HSUPA = 9;
/** Current network is HSPA */
public static final int NETWORK_TYPE_HSPA = 10;
/** Current network is iDen */
public static final int NETWORK_TYPE_IDEN = 11;
/** Current network is EVDO revision B*/
public static final int NETWORK_TYPE_EVDO_B = 12;
/** Current network is LTE */
public static final int NETWORK_TYPE_LTE = 13;
/** Current network is eHRPD */
public static final int NETWORK_TYPE_EHRPD = 14;
/** Current network is HSPA+ */
public static final int NETWORK_TYPE_HSPAP = 15;
/** Current network is GSM {@hide} */
public static final int NETWORK_TYPE_GSM = 16;
/** Current network is TD_SCDMA {@hide} */
public static final int NETWORK_TYPE_TD_SCDMA = 17;
/** Current network is IWLAN {@hide} */
public static final int NETWORK_TYPE_IWLAN = 18;

下面通過一些實例來測試一下吧

首先記得加權(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"/>

實例代碼

public class MainActivity extends AppCompatActivity {
private static final int NETWORKTYPE_WIFI = 0;
private static final int NETWORKTYPE_4G = 1;
private static final int NETWORKTYPE_2G = 2;
private static final int NETWORKTYPE_NONE = 3;
public TextView mTextView;
public TelephonyManager mTelephonyManager;
public PhoneStatListener mListener;
/**
* 網(wǎng)絡(luò)信號強度監(jiān)聽
*
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = (TextView) findViewById(R.id.textview);
//獲取telephonyManager
mTelephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
//開始監(jiān)聽
mListener = new PhoneStatListener();
//監(jiān)聽信號強度
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);
}
@Override
protected void onResume() {
super.onResume();
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_SIGNAL_STRENGTHS);
}
@Override
protected void onPause() {
super.onPause();
//用戶不在當前頁面時,停止監(jiān)聽
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_NONE);
}
private class PhoneStatListener extends PhoneStateListener {
//獲取信號強度
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
//獲取網(wǎng)絡(luò)信號強度
//獲取0-4的5種信號級別,越大信號越好,但是api23開始才能用
// int level = signalStrength.getLevel();
int gsmSignalStrength = signalStrength.getGsmSignalStrength();
//獲取網(wǎng)絡(luò)類型
int netWorkType = getNetWorkType(MainActivity.this);
switch (netWorkType) {
case NETWORKTYPE_WIFI:
mTextView.setText("當前網(wǎng)絡(luò)為wifi,信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_2G:
mTextView.setText("當前網(wǎng)絡(luò)為2G移動網(wǎng)絡(luò),信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_4G:
mTextView.setText("當前網(wǎng)絡(luò)為4G移動網(wǎng)絡(luò),信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_NONE:
mTextView.setText("當前沒有網(wǎng)絡(luò),信號強度為:" + gsmSignalStrength);
break;
case -1:
mTextView.setText("當前網(wǎng)絡(luò)錯誤,信號強度為:" + gsmSignalStrength);
break;
}
}
}
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) {
//這里只簡單區(qū)分兩種類型網(wǎng)絡(luò),認為4G網(wǎng)絡(luò)為快速,但最終還需要參考信號值
return true;
}
return false;
}
}

關(guān)于信號獲取流程,這個還需深入研究,目前只在應(yīng)用層簡單獲取了網(wǎng)絡(luò)信號。

以上所述是小編給大家介紹的Android手機信號強度檢測詳細介紹,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Android如何獲取當前CPU頻率和占用率

    Android如何獲取當前CPU頻率和占用率

    最近在優(yōu)化 App 的性能,需要獲取當前 CPU視頻頻率和占用率,所以本文小編就來和大家總結(jié)一下如何在Android中獲取當前CPU頻率和占用率吧
    2025-03-03
  • Android10 啟動Zygote源碼解析

    Android10 啟動Zygote源碼解析

    這篇文章主要為大家介紹了Android 10 啟動分析之Zygote篇,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • Android Activity與Service通信(不同進程之間)詳解

    Android Activity與Service通信(不同進程之間)詳解

    這篇文章主要介紹了Android Activity與Service通信(不同進程之間)的相關(guān)資料,這里提供了三種方法,需要的朋友可以參考下
    2016-10-10
  • Android版本更新實例詳解

    Android版本更新實例詳解

    這篇文章主要介紹了Android版本更新實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • android判斷設(shè)備是否有相機的實例代碼

    android判斷設(shè)備是否有相機的實例代碼

    下面小編就為大家?guī)硪黄猘ndroid判斷設(shè)備是否有相機的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Android 性能優(yōu)化系列之bitmap圖片優(yōu)化

    Android 性能優(yōu)化系列之bitmap圖片優(yōu)化

    在日常開發(fā)的APP,大部分時候需要想用戶展示圖片信息,圖片最終對應(yīng)Android中的Bitmap對象。而對于APP端來說Bitmap又是一個比較麻煩的問題,主要表現(xiàn)在Bitmap是非常占用內(nèi)存的對象,處理不當將導(dǎo)致APP運行卡頓甚至出現(xiàn)OOM
    2021-11-11
  • Android Activity啟動模式之standard實例詳解

    Android Activity啟動模式之standard實例詳解

    這篇文章主要介紹了Android Activity啟動模式之standard,結(jié)合實例形式較為詳細的分析了Android中活動(Activity)四種啟動模式中的standard相關(guān)注意事項與實現(xiàn)技巧,需要的朋友可以參考下
    2016-01-01
  • Android中的windowSoftInputMode屬性詳解

    Android中的windowSoftInputMode屬性詳解

    這篇文章主要介紹了Android中的windowSoftInputMode屬性詳解,本文對windowSoftInputMode的9個屬性做了詳細總結(jié),需要的朋友可以參考下
    2014-10-10
  • Android使用http請求手機號碼歸屬地查詢代碼分享

    Android使用http請求手機號碼歸屬地查詢代碼分享

    這篇文章主要介紹了Android使用http請求手機號碼歸屬地查詢代碼分享的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • Android?Flutter實現(xiàn)頁面切換轉(zhuǎn)場動畫效果

    Android?Flutter實現(xiàn)頁面切換轉(zhuǎn)場動畫效果

    Hero組件非常適合從列表、概覽頁切換到詳情頁轉(zhuǎn)場動畫場合。本文將利用Hero組件制作一個簡單的頁面切換轉(zhuǎn)場動畫效果,感興趣的可以了解一下
    2022-06-06

最新評論

文安县| 荣昌县| 崇仁县| 板桥市| 西宁市| 邯郸县| 汉沽区| 浦城县| 荥经县| 南溪县| 龙口市| 阳西县| 营山县| 绥化市| 晴隆县| 台南县| 蒙山县| 隆安县| 高阳县| 彝良县| 嫩江县| 万安县| 定边县| 通州区| 酒泉市| 福鼎市| 黎城县| 旌德县| 同仁县| 恩施市| 潢川县| 新津县| 阿鲁科尔沁旗| 新泰市| 延寿县| 祁门县| 化州市| 昌江| 庆阳市| 靖江市| 大关县|