日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android获取网络状态

發布時間:2024/4/19 Android 59 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android获取网络状态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:在開發安卓移動端時,幾乎每一個app都需要連接網絡,因此,對設備的網絡狀態檢測是很有必要的!比如:檢測當前網絡是否可用,當前可用的網絡是屬于WIFI還是MOBILE等等。


實現步驟流程:
1 .獲取ConnectivityManager對象

// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理) Context context = activity.getApplicationContext(); ConnectivityManager connectivityManager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);

2、獲取NetworkInfo對象

// 獲取NetworkInfo對象 NetworkInfo[] networkInfo = connectivityManager.getAllNetworkInfo();

3、判斷當前網絡狀態是否為連接狀態

if (networkInfo[i].getState() == NetworkInfo.State.CONNECTED){ return true; }

4、在AndroidManifest.xml中添加訪問當前網絡狀態權限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

已經封裝好了的網絡工具類

package com.samego.alic.utils; import android.content.Context; import android.location.LocationManager; import android.net.ConnectivityManager; import android.net.NetworkInfo;import android.telephony.TelephonyManager; /*** 網絡工具類* Created by alic on 16-4-8. */ public class NetWorkUtils { /** * 判斷是否有網絡連接 * * @param context * @return */public static boolean isNetworkConnected(Context context) {if (context != null) {// 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理) ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 獲取NetworkInfo對象NetworkInfo networkInfo = manager.getActiveNetworkInfo();//判斷NetworkInfo對象是否為空if (networkInfo != null)return networkInfo.isAvailable(); }return false; } /** * 判斷WIFI網絡是否可用 * * @param context * @return /public static boolean isWifiConnected(Context context) {if (context != null) { // 獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// 獲取NetworkInfo對象NetworkInfo networkInfo = manager.getActiveNetworkInfo(); //判斷NetworkInfo對象是否為空 并且類型是否為WIFIif (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) return networkInfo.isAvailable();} return false;} /** * 判斷MOBILE網絡是否可用 * * @param context * @return */public static boolean isMobileConnected(Context context) {if (context != null) {//獲取手機所有連接管理對象(包括對wi-fi,net等連接的管理)ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);//獲取NetworkInfo對象NetworkInfo networkInfo = manager.getActiveNetworkInfo();//判斷NetworkInfo對象是否為空 并且類型是否為MOBILE if (networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_MOBILE)return networkInfo.isAvailable();} return false; } /** * 獲取當前網絡連接的類型信息 * 原生 * * @param context * @return */ public static int getConnectedType(Context context) {if (context != null) {//獲取手機所有連接管理對象ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);//獲取NetworkInfo對象NetworkInfo networkInfo = manager.getActiveNetworkInfo();if (networkInfo != null && networkInfo.isAvailable()) {//返回NetworkInfo的類型return networkInfo.getType();}}return -1; } /** * 獲取當前的網絡狀態 :沒有網絡-0:WIFI網絡1:4G網絡-4:3G網絡-3:2G網絡-2 * 自定義 * * @param context * @return */public static int getAPNType(Context context) {//結果返回值int netType = 0;//獲取手機所有連接管理對象ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);//獲取NetworkInfo對象NetworkInfo networkInfo = manager.getActiveNetworkInfo();//NetworkInfo對象為空 則代表沒有網絡if (networkInfo == null) { return netType;}//否則 NetworkInfo對象不為空 則獲取該networkInfo的類型int nType = networkInfo.getType();if (nType == ConnectivityManager.TYPE_WIFI) {//WIFInetType = 1;} else if (nType == ConnectivityManager.TYPE_MOBILE) {int nSubType = networkInfo.getSubtype();TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);//3G 聯通的3G為UMTS或HSDPA 電信的3G為EVDOif (nSubType == TelephonyManager.NETWORK_TYPE_LTE && !telephonyManager.isNetworkRoaming()) {netType = 4;} else if (nSubType == TelephonyManager.NETWORK_TYPE_UMTS|| nSubType == TelephonyManager.NETWORK_TYPE_HSDPA|| nSubType == TelephonyManager.NETWORK_TYPE_EVDO_0&& !telephonyManager.isNetworkRoaming()) {netType = 3;//2G 移動和聯通的2G為GPRS或EGDE,電信的2G為CDMA} else if (nSubType == TelephonyManager.NETWORK_TYPE_GPRS|| nSubType == TelephonyManager.NETWORK_TYPE_EDGE|| nSubType == TelephonyManager.NETWORK_TYPE_CDMA&& !telephonyManager.isNetworkRoaming()) {netType = 2;} else {netType = 2; }}return netType;} /** * 判斷GPS是否打開 *ACCESS_FINE_LOCATION權限 * @param context * @return */ public static boolean isGPSEnabled(Context context) { //獲取手機所有連接LOCATION_SERVICE對象 LocationManager locationManager = ((LocationManager) context.getSystemService(Context.LOCATION_SERVICE));return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER);} }

網絡信號詳解


Added in API level 1

public static final int NETWORK_TYPE_UNKNOWN Network type is unknown Constant Value: 0 (0x00000000) (不知道網絡類型) public static final int NETWORK_TYPE_GPRS Current network is GPRS Constant Value: 1 (0x00000001) (2.5G)移動和聯通 public static final int NETWORK_TYPE_EDGE Current network is EDGE Constant Value: 2 (0x00000002) (2.75G)2.5G到3G的過渡 移動和聯通 public static final int NETWORK_TYPE_UMTS Current network is UMTS Constant Value: 3 (0x00000003) (3G)聯通

Added in API level 4

public static final int NETWORK_TYPE_CDMA Current network is CDMA: Either IS95A or IS95B Constant Value: 4 (0x00000004) (2G 電信) public static final int NETWORK_TYPE_EVDO_0 Current network is EVDO revision 0 Constant Value: 5 (0x00000005) ( 3G )電信 public static final int NETWORK_TYPE_EVDO_A Current network is EVDO revision A Constant Value: 6 (0x00000006) (3.5G) 屬于3G過渡 public static final int NETWORK_TYPE_1xRTT Current network is 1xRTT Constant Value: 7 (0x00000007) ( 2G )

Added in API level 5

public static final int NETWORK_TYPE_HSDPA Current network is HSDPA Constant Value: 8 (0x00000008) (3.5G ) public static final int NETWORK_TYPE_HSUPA Current network is HSUPA Constant Value: 9 (0x00000009) ( 3.5G ) public static final int NETWORK_TYPE_HSPA Current network is HSPA Constant Value: 10 (0x0000000a) ( 3G )聯通

Added in API level 8

public static final int NETWORK_TYPE_IDEN Current network is iDen Constant Value: 11 (0x0000000b) (2G )

Added in API level 9

public static final int NETWORK_TYPE_EVDO_B Current network is EVDO revision B Constant Value: 12 (0x0000000c) 3G-3.5G

Added in API level 11

public static final int NETWORK_TYPE_LTE Current network is LTE Constant Value: 13 (0x0000000d) (4G) public static final int NETWORK_TYPE_EHRPD Current network is eHRPD Constant Value: 14 (0x0000000e) 3G(3G到4G的升級產物)

Added in API level 13

public static final int NETWORK_TYPE_HSPAP Current network is HSPA+ Constant Value: 15 (0x0000000f) ( 3G )

網絡信號簡記

4G LTE
3G 聯通的3G為HSDPA或HSDPAP 電信的3G為EVDO 移動3G為UMTS
2G 移動和聯通的2G為GPRS或EGDE 電信的2G為CDMA


總結

以上是生活随笔為你收集整理的Android获取网络状态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。