在這裏,我的Android設備同時支持WiFi和3G。在特定時間哪個網絡可用於此設備。因爲我的要求是3g可用時,我必須上傳少量的數據。當wifi可用時,整個數據必須上傳。所以,我必須檢查連接是WiFi還是3G。請幫幫我。提前致謝。如何檢查WiFi或3G網絡可在Android設備上
31
A
回答
54
我用這個:
/**
* Checks if we have a valid Internet Connection on the device.
* @param ctx
* @return True if device has internet
*
* Code from: http://www.androidsnippets.org/snippets/131/
*/
public static boolean haveInternet(Context ctx) {
NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to
// disable internet while roaming, just return false
return false;
}
return true;
}
您還需要
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
在AndroidMainfest.xml
爲了讓您可以使用此代碼段的網絡類型:
ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//mobile
State mobile = conMan.getNetworkInfo(0).getState();
//wifi
State wifi = conMan.getNetworkInfo(1).getState();
然後用它這樣的:
if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) {
//mobile
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
//wifi
}
爲了得到我會嘗試移動網絡的類型TelephonyManager#getNetworkType或NetworkInfo#getSubtypeName
+0
當我在沒有SIM卡的平板電腦上使用此代碼時,此代碼給我錯誤。 – 2013-11-11 05:17:18
1
您需要添加以下權限的Android清單文件:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
之後,你可以使用下面的功能來檢查wifi或移動網絡是否連接
public static boolean isWifiConnected(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return ((netInfo != null) && netInfo.isConnected());
}
public static boolean isMobileConnected(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
return ((netInfo != null) && netInfo.isConnected());
}
個
從developer.android.com一些參考文獻:
0
首先獲取到ConnectivityManager的引用,然後check the Wifi and 3G status的設備。 您需要ACCESS_NETWORK_STATE權限才能使用此服務。
ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
NetworkInfo mMobile = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (mWifi.isAvailable() == true) {
return "Connected to WiFi";
} else if (mMobile.isAvailable() == true) {
return "Connected to Mobile Network";
} else return "No internet Connection"
0
您可以使用此方法來檢查您的網絡連接是否2G,3G或4G:
public String getNetworkClass(Context context) {
TelephonyManager mTelephonyManager = (TelephonyManager)
context.getSystemService(Context.TELEPHONY_SERVICE);
int networkType = mTelephonyManager.getNetworkType();
switch (networkType) {
case TelephonyManager.NETWORK_TYPE_GPRS:
case TelephonyManager.NETWORK_TYPE_EDGE:
case TelephonyManager.NETWORK_TYPE_CDMA:
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return "2G";
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_EVDO_A:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return "3G";
case TelephonyManager.NETWORK_TYPE_LTE:
return "4G";
default:
return "Unknown";
}
}
並採用下面的方法,你可以檢查是否網絡是否可用,並通過移動網絡或WiFi訪問互聯網:
public String getNetworkType(Context context){
String networkType = null;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
if (activeNetwork != null) { // connected to the internet
if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
networkType = "WiFi";
} else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
networkType = "Mobile";
}
} else {
// not connected to the internet
}
return networkType;
}
相關問題
- 1. 檢測3G或Wifi網絡恢復
- 2. 如何知道iPhone設備是否擁有3G網絡或Wifi網絡?
- 3. 如何檢查何時網絡在Android設備上不可用?
- 4. 檢查wifi或3G存在於android
- 5. 如何在iOS設備上跟蹤3G/wifi上的網絡流量?
- 6. 如何檢查Windows Phone 7中的3G,WiFi,EDGE,蜂窩網絡?
- 7. 如何從android上找到wifi網絡上的特定設備?
- 8. 在Android中檢查wifi網絡
- 9. 檢查iPhone網絡設置 - 啓用3G
- 10. 在iOS中,如何從Javascript(網絡)檢測到設備通過3G或Wifi連接?
- 11. Windows WiFi網絡設備
- 12. 當設備在3G網絡上時,AFNetworking不工作,但當它在WiFi網絡上時,它工作。
- 13. 如何查找任何設備上可用的網絡是EDGE還是WiFi?
- 14. 檢查網絡可在android
- 15. 如何通過wifi和3G網絡設置語音聊天?
- 16. Android網絡檢查不在某些設備上工作
- 17. Android:如何從AlarmManager喚醒WIFI(或3G)?
- 18. 如何檢查wifi/3g是否啓用?
- 19. 如何知道設備連接到WiFi或3G,編程
- 20. 如何檢測Windows 8設備是否處於WiFi/LAN或3G Internet連接?
- 21. 如何於3G檢測網絡類型轉換成H + Android上
- 22. 如何檢查Android設備是否連接到網絡?
- 23. Android上的Wifi網絡?
- 24. 通知用戶當wifi,或3g 4g網絡迷路jquery或javascript
- 25. 確定連接是否在3G或WIFI網絡
- 26. iPhone活躍網絡類型(2G,3G,WIFI)
- 27. 是否有任何API可以區分3G網絡和Wifi?
- 28. 在Android設備上存根網絡
- 29. 如何檢查網絡連接啓用或禁用在移動WIFI和3G(數據計劃)?
- 30. 如何檢查WiFi網絡是否可用
@govardhan:+1我也有這個問題。你有沒有得到任何答案? – Praveen 2010-07-24 12:13:11
看看那個http://stackoverflow.com/questions/2789612/how-can-i-check-whether-an-android-device-is-connected-to-the-web http://stackoverflow.com/questions/3119607/how-to-be-informed-on-wifi-network-status-change http://stackoverflow.com/questions/3211978/how-to-check-internet-connectivity-in-android http:/ /stackoverflow.com/questions/2919414/get-network-type http://stackoverflow.com/search?q = ConnectivityManager – Fedor 2010-07-16 07:34:42
此鏈接中包含您需要的代碼http://stackoverflow.com/a/9256972/191246。 – ccpizza 2012-07-14 20:58:24