有的Android應用程式有“連網”和“斷網”兩種串連方式,“斷網”和“連網”有兩種不同的介面,”斷網“情況下調用斷網的API,“連網”情況下調用“連網”的API,如果“斷網”情況下調用連網的API,就會出現異常。應該是“連網”情況下如果斷網,應該就應該調到“斷網”的介面,並調用“斷網”情況下的API。
1.能夠檢測網路,首先具有如下許可權(訪問網路的許可權和訪問網路狀態的許可權):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
2.在Manifest中配置BroadReceiver監測斷網,action裡面是網路連接變化時候來觸發這個Receiver,如下所示:
<receiver
android:name=".ConnectionChangeReceiver"
android:label="NetworkConnection" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
3.BroadcastReceiver的實現代碼如下:
public class ConnectionChangeReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity != null) {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
//如果有網路連接中就直接退出
return;
}
}
}
}
//如果沒有網路連接(網路已經斷開)就採取相應的邏輯,跳到相應的介面。
SharedPreferences settings = context.getSharedPreferences(
Constant.PREFS_NAME, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean(Constant.PREFS_NETWORK_ONLINE, false);
editor.commit();
intent.setClass(context, NetworkListActivity.class);
//在BroadcastReceiver(或者像Service那些沒有介面的Android組件)中啟動Activity,應該設定FLAG_ACTIVITY_NEW_TASK標記。
//清除所有的Activity,應該設定FLAG_ACTIVITY_CLEAR_TOP標記。
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
希望對大家有所協助!