60
A
回答
144
新的Java類:
public class ConnectionChangeReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();
NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo( ConnectivityManager.TYPE_MOBILE);
if (activeNetInfo != null)
{
Toast.makeText(context, "Active Network Type : " + activeNetInfo.getTypeName(), Toast.LENGTH_SHORT).show();
}
if(mobNetInfo != null)
{
Toast.makeText(context, "Mobile Network Type : " + mobNetInfo.getTypeName(), Toast.LENGTH_SHORT).show();
}
}
}
在AndroidManifest.xml中新的XML的 「清單」 元素:
<!-- Needed to check when the network connection changes -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
在AndroidManifest.xml中新的XML 「應用程序」 元素:
<receiver android:name="com.blackboard.androidtest.receiver.ConnectionChangeReceiver"
android:label="NetworkConnection">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>
7
上述答案僅適用於移動分組數據已啓用。否則,ConnectivityManager將爲空,並且不能再檢索NetworkInfo。解決方法是使用PhoneStateListener或TelephonyManager。
16
我一直在使用一個小設置來檢查帶寬,以確定如何縮放事物,如圖像。
下的活性,在AndroidManifest:
<intent-filter>
...
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
在活動其中正在執行的檢查:然後
boolean network;
int bandwidth;
@Override
public void onCreate(Bundle savedInstanceState) {
...
network = isDataConnected();
bandwidth = isHighBandwidth();
registerReceiver(new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
network = isDataConnected();
bandwidth = isHighBandwidth();
}
}, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"));
...
}
...
private boolean isDataConnected() {
try {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo().isConnectedOrConnecting();
} catch (Exception e) {
return false;
}
}
private int isHighBandwidth() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = cm.getActiveNetworkInfo();
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
WifiManager wm = (WifiManager) getSystemService(Context.WIFI_SERVICE);
return wm.getConnectionInfo().getLinkSpeed();
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
TelephonyManager tm = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
return tm.getNetworkType();
}
return 0;
}
一個示例用法是:
if (network) {
if (bandwidth > 16) {
// Code for large items
} else if (bandwidth <= 16 && bandwidth > 8) {
// Code for medium items
} else {
//Code for small items
}
} else {
//Code for disconnected
}
這是不是最漂亮的,但它具有足夠的靈活性,可以改變項目de的帶寬截止值等待他們是什麼和我的要求。
+0
找到這個非常有用,謝謝:) – Skynet 2014-02-06 10:15:20
9
如果使用Android Annotations是你在你的活動試試這個選項 - 這一切,產生其餘的:
@Receiver(actions = ConnectivityManager.CONNECTIVITY_ACTION,
registerAt = Receiver.RegisterAt.OnResumeOnPause)
void onConnectivityChange() {
//react
}
使用這個只有當你已經在使用AndroidAnnotations - 把你的項目中這種依賴性只爲這段代碼會過度殺傷。
相關問題
- 1. Tomcat沒有監聽網絡驅動器
- 2. java網絡事件監聽器
- 3. Golang關閉網絡監聽器
- 4. Android監聽器中斷監聽器
- 5. Android-gps監聽器
- 6. 互聯網監聽器Android示例
- 7. 如何在網絡層監聽?
- 8. Android網絡流量監測
- 9. 如何在android中監聽網絡連接
- 10. Android - 事件監聽器
- 11. Android WiFi狀態監聽器
- 12. android imageview onclick監聽器
- 13. 在Android的GIF監聽器
- 14. Android TV,遙控監聽器
- 15. Android選擇監聽器
- 16. 監聽器教程 - Android Eclipse
- 17. Android EditText監聽器輸入
- 18. Android Wifi監聽器策略
- 19. Android微調監聽器
- 20. Android WebView下載監聽器
- 21. Android GPS位置監聽器
- 22. Android RatingBar onRatingChanged監聽器
- 23. Android EditText事件監聽器
- 24. Android的位置監聽器
- 25. Android:時間監聽器
- 26. Android Mediaplayer錯誤監聽器
- 27. Android Studio響應監聽器
- 28. Android軟鍵盤監聽器?
- 29. Android的全球監聽器
- 30. Android手勢監聽器?
嘿感謝它按預期工作 – Sam97305421562 2009-11-24 09:56:36
作爲@noillusioin說,activeNetInfo可以爲空。這表示如果您知道(保存狀態)您之前連接了網絡連接,則表示網絡連接已斷開。 – larham1 2013-04-18 21:10:28
您還需要檢查NetworkInfo.isConnected – shuriquen 2015-04-18 21:25:21