Android應用程式中用Broadcast來監測”斷網”,並進行相應處理

來源:互聯網
上載者:User

有的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);
                      
    }

  

希望對大家有所協助!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.