最近項目中遇到與日本的AWS伺服器進行資料互動 通路https協定, 自己用單例寫了一個相信任何網頁的httpclient去連接配接,成功後需要上傳大量的圖檔,但是測試機有限,老闆讓我寫一個測試程式給大量的使用者去測,由于客戶不知道什麼機型啊 網絡類型什麼的 就要求一個按鈕 擷取我們需要的測試結果。 開始在網上找如何擷取手機品牌機型 手機營運商 以及資料流量的類型的内容,發現魚龍混雜。自己花了點時間封裝了一下 以便以後用到的時候可以直接拷貝使用。
由于是擷取硬資訊是以有大量的常量去比對
代碼沒什麼複雜的很簡單就能看懂 就直接上代碼了
public class Utils {
private static final int NETWORK_TYPE_UNAVAILABLE = -1;
private static final int NETWORK_TYPE_WIFI = -101;
private static final int NETWORK_CLASS_WIFI = -101;
private static final int NETWORK_CLASS_UNAVAILABLE = -1;
/** 不清楚資料流量類型 */
private static final int NETWORK_CLASS_UNKNOWN = 0;
/** 資料流量類型為2G */
private static final int NETWORK_CLASS_2_G = 1;
/** 資料流量類型為3G */
private static final int NETWORK_CLASS_3_G = 2;
/** 資料流量類型為4G . */
private static final int NETWORK_CLASS_4_G = 3;
private static DecimalFormat df = new DecimalFormat("#.##");
// 适配低版本手機
/** 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;
//是否打開了移動資料流量
private static boolean mobileNetwork = false;
//是否打開了無線
private static boolean wifiNetwork= false;
private static Context context;
private static Utils utils;
private Utils(Context context){
this.context = context;
}
public static Utils getUtils(Context context){
if(utils == null){
utils = new Utils(context);
return utils;
}
return utils;
}
public static String getInfos(){
// 營運商
String provider;
// 資料流量類型 --- 2G,3G,4G
String type;
// 手機品牌型号
String model;
provider = getProvider(context);
model = android.os.Build.MODEL;
type = getNetworkInfo();
return provider+type+model;
}
/**
* 擷取營運商
*
* @return
*/
public static String getProvider(Context context) {
String provider = "未知";
try {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String IMSI = telephonyManager.getSubscriberId();
if (IMSI == null) {
if (TelephonyManager.SIM_STATE_READY == telephonyManager
.getSimState()) {
String operator = telephonyManager.getSimOperator();
if (operator != null) {
if (operator.equals("46000")
|| operator.equals("46002")
|| operator.equals("46007")) {
provider = "中國移動";
} else if (operator.equals("46001")) {
provider = "中國聯通";
} else if (operator.equals("46003")) {
provider = "中國電信";
}
}
}
} else {
if (IMSI.startsWith("46000") || IMSI.startsWith("46002")
|| IMSI.startsWith("46007")) {
provider = "中國移動";
} else if (IMSI.startsWith("46001")) {
provider = "中國聯通";
} else if (IMSI.startsWith("46003")) {
provider = "中國電信";
}
}
} catch (Exception e) {
e.printStackTrace();
}
return provider;
}
private static String getNetworkInfo(){
String type = null;
// 擷取網絡連接配接情況
ConnectivityManager mConnectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo mobileNetworkInfo = mConnectivity
.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
NetworkInfo wifiNetworkInfo = mConnectivity
.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (mobileNetworkInfo.isConnected()) {
mobileNetwork = true;
type = getCurrentNetworkType(context);
}else{
mobileNetwork = false;
}
if (wifiNetworkInfo.isConnected()) {
wifiNetwork = true;
}else{
wifiNetwork = false;
}
return type;
}
private static int getNetworkClassByType(int networkType) {
switch (networkType) {
case NETWORK_TYPE_UNAVAILABLE:
return NETWORK_CLASS_UNAVAILABLE;
case NETWORK_TYPE_WIFI:
return NETWORK_CLASS_WIFI;
case NETWORK_TYPE_GPRS:
case NETWORK_TYPE_EDGE:
case NETWORK_TYPE_CDMA:
case NETWORK_TYPE_1xRTT:
case NETWORK_TYPE_IDEN:
return NETWORK_CLASS_2_G;
case NETWORK_TYPE_UMTS:
case NETWORK_TYPE_EVDO_0:
case NETWORK_TYPE_EVDO_A:
case NETWORK_TYPE_HSDPA:
case NETWORK_TYPE_HSUPA:
case NETWORK_TYPE_HSPA:
case NETWORK_TYPE_EVDO_B:
case NETWORK_TYPE_EHRPD:
case NETWORK_TYPE_HSPAP:
return NETWORK_CLASS_3_G;
case NETWORK_TYPE_LTE:
return NETWORK_CLASS_4_G;
default:
return NETWORK_CLASS_UNKNOWN;
}
}
/**
* 擷取網絡類型
*
* @return
*/
public static String getCurrentNetworkType(Context context) {
int networkClass = getNetworkClass(context);
String type = "未知";
switch (networkClass) {
case NETWORK_CLASS_UNAVAILABLE:
type = "無";
break;
case NETWORK_CLASS_WIFI:
type = "Wi-Fi";
break;
case NETWORK_CLASS_2_G:
type = "2G";
break;
case NETWORK_CLASS_3_G:
type = "3G";
break;
case NETWORK_CLASS_4_G:
type = "4G";
break;
case NETWORK_CLASS_UNKNOWN:
type = "未知";
break;
}
return type;
}
private static int getNetworkClass(Context context) {
int networkType = NETWORK_TYPE_UNKNOWN;
try {
final NetworkInfo network = ((ConnectivityManager)
context
.getSystemService(Context.CONNECTIVITY_SERVICE))
.getActiveNetworkInfo();
if (network != null && network.isAvailable()
&& network.isConnected()) {
int type = network.getType();
if (type == ConnectivityManager.TYPE_WIFI) {
networkType = NETWORK_TYPE_WIFI;
} else if (type == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(
Context.TELEPHONY_SERVICE);
networkType = telephonyManager.getNetworkType();
}
} else {
networkType = NETWORK_TYPE_UNAVAILABLE;
}
} catch (Exception ex) {
ex.printStackTrace();
}
return getNetworkClassByType(networkType);
}
}
測試結果可以給大家看看
