Android網路型別判斷 2g 3g wifi

2021-06-26 14:18:26 字數 4128 閱讀 5525



判斷網路型別是wifi,還是3g,還是2g網路,對不同

說明:下面用到的資料移動2g,聯通2g,聯通3g,wifi我都已經測試過,暫時手上

沒有電信的卡,所以沒有驗證,有電信手機的同事,可以驗證一下,驗證後將結果

傳送給大家。

connectivitymanager connectmgr = (connectivitymanager) this

.getsystemservice(context.connectivity_service);

networkinfo info = connectmgr.getactivenetworkinfo();

一、判斷網路是否是wifi,在判斷之前一定要進行的非空判斷,如果沒有任何網路

連線info ==null

info.gettype() == connectivitymanager.type_wifi

二、判斷是否是手機網路

info !=null && info.gettype() ==  connectivitymanager.type_mobile

手機網路進行詳細區分:

info.getsubtype() 這裡使用 getsubtype(),不是 gettype(),gettype()返回的

是0,或者1,是區分是手機網路還是wifi

info.getsubtype()取值列表如下:

* network_type_cdma 網路型別為cdma

* network_type_edge 網路型別為edge

* network_type_evdo_0 網路型別為evdo0

* network_type_evdo_a 網路型別為evdoa

* network_type_gprs 網路型別為gprs

* network_type_hsdpa 網路型別為hsdpa

* network_type_hspa 網路型別為hspa

* network_type_hsupa 網路型別為hsupa

* network_type_umts 網路型別為umts

聯通的3g為umts或hsdpa,移動和聯通的2g為gprs或edge,電信的2g為cdma,電信

的3g為evdo

android獲取手機的ip位址

private

string getphoneip()

} }

} catch

(exception e)

return

"";

}

android中與**功能相關的類是 telephonymanager ,此類中定義了很多常量,以下分類說明

獲取以下資訊需要在androidmanifest.xml中指定許可權

一、 資料連線狀態

獲取資料連線狀態:int getdatastate()

獲取資料活動狀態:int getdataactivity()

常用的有這幾個:

int data_activity_in 資料連線狀態:活動,正在接受資料

int data_activity_out 資料連線狀態:活動,正在傳送資料

int data_activity_inout 資料連線狀態:活動,正在接受和傳送資料

int data_activity_none 資料連線狀態:活動,但無資料傳送和接受

int data_connected 資料連線狀態:已連線

int data_connecting 資料連線狀態:正在連線

int data_disconnected 資料連線狀態:斷開

int data_suspended 資料連線狀態:暫停

二、 流動網路型別

獲取網路型別:int getnetworktype()

常用的有這幾個:

int network_type_cdma 網路型別為cdma

int network_type_edge 網路型別為edge

int network_type_evdo_0 網路型別為evdo0

int network_type_evdo_a 網路型別為evdoa

int network_type_gprs 網路型別為gprs

int network_type_hsdpa 網路型別為hsdpa

int network_type_hspa 網路型別為hspa

int network_type_hsupa 網路型別為hsupa

int network_type_umts 網路型別為umts

在中國,聯通的3g為umts或hsdpa,移動和聯通的2g為gprs或egde,電信的2g為cdma,電信的3g為evdo

三、 手機制式型別

獲取手機制式:int getphonetype()

int phone_type_cdma 手機制式為cdma,電信

int phone_type_gsm 手機制式為gsm,移動和聯通

int phone_type_none 手機制式未知

四、 sim卡狀態

獲取sim卡狀態:int getsimstate()

int sim_state_absent sim卡未找到

int sim_state_network_locked sim卡網路被鎖定,需要network pin解鎖

int sim_state_pin_required sim卡pin被鎖定,需要user pin解鎖

int sim_state_puk_required sim卡puk被鎖定,需要user puk解鎖

int sim_state_ready sim卡可用

int sim_state_unknown sim卡未知

五、其它資訊

string getsimcountryiso()

返回sim卡提供商的國家**

string getnetworkcountryiso()

返回iso標準的國家碼,即國際長途區號

string getsimoperator()

string getnetworkoperator()

返回mcc+mnc** (sim卡運營商國家**和運營商網路**)(imsi)

string getsimoperatorname()

string getnetworkoperatorname()

返回流動網路運營商的名字(spn)

string getsubscriberid()

返回imsi,即國際移動使用者識別碼

string getdeviceid()

如果是gsm網路,返回imei;如果是cdma網路,返回meid

string getsimserialnumber()

返回sim卡的序列號(imei)

string getline1number()

返回手機號碼,對於gsm網路來說即msisdn

boolean isnetworkroaming()

返回手機是否處於漫遊狀態

解釋:imsi是國際移動使用者識別碼的簡稱(international mobile subscriber identity)

imsi共有15位,其結構如下:

mcc+mnc+min

mcc:mobile country code,移動國家碼,共3位,中國為460;

mnc:mobile networkcode,流動網路碼,共2位

在中國,移動的**為電00和02,聯通的**為01,電信的**為03

合起來就是(也是android手機中apn配置檔案中的**):

中國移動:46000 46002

中國聯通:46001

中國電信:46003

舉例,乙個典型的imsi號碼為460030912121001

imei是international mobile equipment identity (國際移動裝置標識)的簡稱

imei由15位數字組成的」電子串號」,它與每台手機一一對應,而且該碼是全世界唯一的

其組成為:

1. 前6位數(tac)是」型號核准號碼」,一般代表機型

2. 接著的2位數(fac)是」最後裝配號」,一般代表產地

3. 之後的6位數(snr)是」串號」,一般代表生產順序號

4. 最後1位數(sp)通常是」0″,為檢驗碼,目前暫備用

Android網路型別判斷 2g 3g wifi

判斷網路型別是wifi,還是3g,還是2g網路,對不同 說明 下面用到的資料移動2g,聯通2g,聯通3g,wifi我都已經測試過,暫時手上 沒有電信的卡,所以沒有驗證,有電信手機的同事,可以驗證一下,驗證後將結果 傳送給大家。connectivitymanager connectmgr connec...

Android網路型別判斷 2g 3g wifi

判斷網路型別是wifi,還是3g,還是2g網路,對不同 說明 下面用到的資料移動2g,聯通2g,聯通3g,wifi我都已經測試過,暫時手上 沒有電信的卡,所以沒有驗證,有電信手機的同事,可以驗證一下,驗證後將結果 傳送給大家。connectivitymanager connectmgr connec...

Android網路型別判斷 2g 3g wifi

判斷網路型別是wifi,還是3g,還是2g網路,對不同 的網路進行不同的處理,現將判斷方法整理給大家,以供參考 說明 下面用到的資料移動2g,聯通2g,聯通3g,wifi我都已經測試過,暫時手上 沒有電信的卡,所以沒有驗證,有電信手機的同事,可以驗證一下,驗證後將結果 傳送給大家。connectiv...