㈠ 如何獲得在android的LTE信號的強度
Android手機信號強度檢測詳細介紹
作者:skxy 字體:[增加 減小] 類型:轉載 時間:2016-11-17 我要評論
這篇文章主要介紹了Android手機信號強度檢測的相關資料,android定義了2種信號單位:dBm和asu。具體兩種的關系本文給大家介紹非常詳細,需要的朋友可以參考下
最近到處在跑著找工作,難免在面試過程中遇到這樣那樣的問題,記得最清楚一次在面試過程中被問到,當手機處於弱網狀態下,如何處理,如何監聽網路信號強度變化。但是真是蒙了,回答的亂七八糟,思路一點都不明確。今天小編在這里帶領大家了解下關於手機信號強度的相關幾個概念。
Android手機信號強度介紹
android定義了2種信號單位:dBm和asu。它們之間的關系是:dBm =-113+2asu,這是google給android手機定義的特有信號單位。例如,我的信號強度為-53dBm,則對應30asu,因為-53 = -113 + (230) 。
詳細介紹兩者:
asu:alone signal unit 獨立信號單元,是一種模擬信號。ASU僅僅代表手機將它的位置傳遞給附近的信號塔的速率。它和dBm測量的是一樣的東西,但是是以一種更加線性的方式來表示。
dBm:是一個表示功率絕對值的值(也可以認為是以1mW功率為基準的一個比值),計算公式為:10log(功率值/1mw)。
[例] 如果功率P為1mw,折算為dBm後為0dBm。
[例] 對於0.01mW的功率,按dBm單位進行折算後的值應為: 10log(0.01/1)=-20dBm。
這個數值越大,表明信號越好。由於手機信號強度一般較小,折算成為dBm一般都是負數。
中國移動的規范規定,手機接收電平>=(城市取-90dBm;鄉村取-94dBm) 時,則滿足覆蓋要求,
也就是說此處無線信號強度滿足覆蓋要求.-67dBm要比-90dBm信號要強20多個dB,
那麼它在打電話接通成功率和通話過程中的話音質量都會好的多。再引入一個相關概念dB。
dB:是一個表徵相對值的值,純粹的比值,只表示兩個量的相對大小關系,沒有單位,當考慮甲的功率相比於乙功率大或小多少個dB時,按下面的計算公式:10log(甲功率/乙功率),如果採用兩者的電壓 比計算,要用20log(甲電壓/乙電壓)。
[例] 甲功率比乙功率大一倍,那麼10lg(甲功率/乙功率)=10lg2=3dB,即甲的功率比乙的功率大3 dB。反之,如果甲的功率是乙的功率的一半,則甲的功率比乙的功率小3 dB。
總結:dBm是負數,越接近0信號強度越高,信號越好,但不可能為0。asu為正數,值越大信號越好。dB是兩個量之間的比值,表示兩個量間的相對大小,而dBm則是表示功率絕對大小的值。
關於對數運算,不記得的自行復習一下了。
下面再來了解一下網路類型吧,還是很多的,不過在國內只要了解國內三大運營商的網路類型大概就可以了。
電信
2G CDMA
3G CDMA2000
4G TD-LTE,FDD-LTE
移動
2G GSM
3G TD-SCDMA
4G TD-LTE,FDD-LTE
聯通
2G GSM
3G WCDMA
4G TD-LTE,FDD-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;
下面通過一些實例來測試一下吧
首先記得加許可權
<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;
/**
* 網路信號強度監聽
*
* @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);
//開始監聽
mListener = new PhoneStatListener();
//監聽信號強度
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();
//用戶不在當前頁面時,停止監聽
mTelephonyManager.listen(mListener, PhoneStatListener.LISTEN_NONE);
}
private class PhoneStatListener extends PhoneStateListener {
//獲取信號強度
@Override
public void onSignalStrengthsChanged(SignalStrength signalStrength) {
super.onSignalStrengthsChanged(signalStrength);
//獲取網路信號強度
//獲取0-4的5種信號級別,越大信號越好,但是api23開始才能用
// int level = signalStrength.getLevel();
int gsmSignalStrength = signalStrength.getGsmSignalStrength();
//獲取網路類型
int netWorkType = getNetWorkType(MainActivity.this);
switch (netWorkType) {
case NETWORKTYPE_WIFI:
mTextView.setText("當前網路為wifi,信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_2G:
mTextView.setText("當前網路為2G移動網路,信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_4G:
mTextView.setText("當前網路為4G移動網路,信號強度為:" + gsmSignalStrength);
break;
case NETWORKTYPE_NONE:
mTextView.setText("當前沒有網路,信號強度為:" + gsmSignalStrength);
break;
case -1:
mTextView.setText("當前網路錯誤,信號強度為:" + 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;//沒有網路
}
return mNetWorkType;
}
/**判斷網路類型*/
private static boolean isFastMobileNetwork(Context context) {
TelephonyManager telephonyManager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_LTE) {
//這里只簡單區分兩種類型網路,認為4G網路為快速,但最終還需要參考信號值
return true;
}
return false;
}
}
關於信號獲取流程,這個還需深入研究,目前只在應用層簡單獲取了網路信號。
㈡ 安卓Android手機怎麼快速查看系統信號強度
手纖答機最大的功能自然是打電話和發簡訊等基礎性電話功能應用,而限制這些功能實用的根本,除了手機自身以外,就是有運營商的網路情況。那麼我們能夠在自己的Android手機中查看到目前所在網路的信號強度情況嗎?
當然可以,Android手機屬於智能手機,州豎派能夠時事顯示出手機的當前狀態,手機信號強度當然也不例外,其實系統本身帶有顯示功能,不用通過第三方的查看工具也能夠查看到當前手機信號強度,適合剛接觸Android系統的機友了解一下。
步驟/方法
1.進入設置選項,在主屏界面中按下Android手機Menu鍵,在彈出的進階菜單中選擇最後一項「設置」(英文系統即為"Settings");
2.將滑動條拖動至最下方,點擊「關於手機」(英文系統即為"About Phone")分類;
3.選擇第二項「狀態」(英文系統即為"Status")分類;
4.這時,就能夠看到「信號強度」(英文系統即為"Signal Strength")選項,前面的-xx(這是一個負數數字)dBm則是手機信號強度。
5.一般"0"—"-50"之間都是一個非常不錯的信號強度,而數值越小則代表著信號越差。冊賀
㈢ 安卓手機撥打哪個號碼查看手機接收信號強度
1
進入手機的撥號界面,輸入 「*#*#4636#*#*」,輸入完成後進入手機的測試界面。
2
點開手機信息就可以查看信號強度了。我的手機測試信號是-73dbm,比-90dbm要大很多,表示我的目前信號很好。
3
輸入「*#*#4636#*#*」,還可以查看「電池信息和WIFI信息哦。感興趣的可以試一試!
注意事項
這個方法只在安卓手機上有效哦。
㈣ Android 怎麼獲取手機網路信號問題
在我們有的時候需要可能需要自己寫一個狀態欄顯示手機的的當前網路類似網路信號的問題這些需求先說說思路吧。
1.這個裡面涉及一個核心的api :PhoneStateListener
讓某個類繼承PhoneStateListener 重寫:onSignalStrengthsChanged 通過傳入的SignalStrength getLevel()獲取信號強度 判斷網路是4G還是3G或者是2G 通過TelephoneManager getNetWorkType獲取
關於顯示移動信號顯示就這幾個方法,現在需要冬天更改因為手機變化的怎麼做呢那麼介紹另外一個API:SubscriptionManager
關於SubscriptionManager :
1.對象實例化: SubscriptionManager mSubscriptionManager = SubscriptionManager.from(Conrtext )返回一個實例對象
SubscriptionInfo sub0 = mSubscriptionManager.(0);
if(null != sub0) {
mPhoneStateListener = new Sim1SignalStrengthsListener(sub0.getSubscriptionId());
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_SIGNAL_STRENGTHS);
}
㈤ 怎樣用手機測網速 安卓手機測網速的方法推薦
據了解,85%以上的年輕人都是低頭族,無論是坐車還是散步都離不開手機,於是手機網速就成為大家關注的問題了,那麼, 怎樣用手機測網速 呢?下面我們就來詳細介紹一下: 怎樣用手機測網速 以及安卓手機測網速的方法推薦?希望可以給你們一些幫助和啟示!
怎樣用手機測網速 :
一:怎樣用手機測網速---使用測速工具進行測速
1、要先上網下載一個專用的測速軟體,比如:在網路上搜索「網速測試」,便會出現很多軟體,要選擇口碑比較好的軟體下載。
2、等下載好之後,要進行安裝,然後打開測速軟體,再點擊「開始測速」按鈕,這樣就開始測速了。
3、等測速好之後,就顯示你當前的網速。
二:怎樣用手機測網速---使用下載件的測速功能進行測速
1、要先下載一個迅雷測速軟體,然後打開,再選擇「設置」按鈕,在彈出的菜單中選擇「網速測試」,進入測速頁面。
2、在測速頁面中,再點擊「開始測試」按鈕,進行網速的測試。
3、稍等片刻,網速結果就顯示出來了。
注意事項:
再測試時,它的結果並不是困定的,而是會根據環境而有所改變。此外,最好在有WiFi時在進行,以免流量超支給自己帶來麻煩。
三、怎樣用手機測網速---手機測試網速方法
1、在使用手機測試網速時要先下載speedtest應用,然後進行安裝,等好了之後,在進行測速或通過手機助手搜索網速測試應用。
2、然後下載安裝應用
3、等完成後進入手機界面,進入應用。
4、進入Speedtest應用之後,就能看到Begin Test或開始等字樣了,點擊開始測試網速即可。
5、等完成之後,進入頁面,就能看到當前網路的的PING值以及上行、下載速度了,再點擊表盤下方的"Restart Test"按鈕就能重新測速了。
注意事項:
有了測速軟體之後,就可以隨時隨地查看手機的網速狀況了。
文章總結: 怎樣用手機測網速 以及安卓手機測網速的方法推薦的相關知識就介紹到這里了,其實,手機測試網速的方法很簡單,只要下載好網速測試軟體,再根據軟體的提示一步一步完成操作,這樣就能了解手機當前的網速狀況了。
㈥ android開發怎麼判斷wifi信號強度
通過WifiManager的方法getScanResults()獲取List<ScanResult>的集合,ScanResult.level就是信號強度是個負數,然後使用
WifiManager.calculateSignalLevel(scanResult.level,
100);就可得到確定的信號強度(calculateSignalLevel為計算信號等級函數,MAX_RSSI和MIN_RSSI分別為最強和最弱信號強度等級的信號強度閥值)。