簡體   English   中英

如何向廣播接收機聲明許多活動? 安卓系統

[英]How to declarare to Broadcast Receiver for many activities? Android

我想對我的應用程序的所有活動聲明廣播接收器,以檢測互聯網何時普及。 完成了嗎? 謝謝

表現

 <receiver
            android:name=".managers.ConnectionReceiver"
            android:label="NetworkChangeReceiver" >
            <intent-filter>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            </intent-filter>
        </receiver>

類擴展了BroadcastReceiver

public class ConnectionReceiver extends BroadcastReceiver {

    ConnectionListener connectionListener = new MainActivity();
    ConnectivityManager connectivityManager;
    NetworkInfo activeNetInfo;

    public ConnectionReceiver() {
}

@Override
public void onReceive(Context context, Intent intent) {
    connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    activeNetInfo = connectivityManager.getActiveNetworkInfo();
    if (activeNetInfo != null) {
        connectionListener.onConnect();
    }else{
        connectionListener.onDisconnect();
    }
}

最簡單的方法是為所有定義此行為的活動創建父類,並從那里創建子類。

例如...

class ConnectionListeningActivity extends Activity {

    protected boolean isConnected;

    BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
         void onReceive(Context context, Intent intent) {
              updateNetworkState();
         }
    };

    public void updateNetworkState() {
         ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);

         NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
         isConnected = activeNetwork != null &&
                  activeNetwork.isConnectedOrConnecting();
    }

    public void onResume() {
        registerReceiver(broadcastReceiver, new IntentFilter(android.net.ConnectivityManager.CONNECTIVITY_ACTION));
        updateNetworkState();
    }

    public void onPause() {
        unregisterReceiver(broadcastReceiver);
    }

}

在這里,我們已經在onResume方法中注冊了broadcastReceiver,並在onPause中取消了對它的注冊,因此當活動不活躍時,它就不會激活。

我們還將在onResume中更新isConnected狀態,因為在首次使用isConnected之前我們可能會或可能不會收到networkStateChange。

現在,我們可以創建一個使用isConnected字段執行某些操作的子類。

在所有活動中,創建廣播接收器的實例並注冊廣播接收器。

ConnectionReceiver receiver = new ConnectionReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION HERE");
getApplicationContext().registerReceiver(receiver, filter)

注意:取消注冊接收者的onStop()方法,因為在多任務處理過程中在Android 7中調用了onPause()方法,然后在onStart()而不是onResume()中再次注冊了接收者

在您想要的活動中添加以下行

  ConnectionReceiver receiver = new ConnectionReceiver();

    public void onResume(){
    super.onResume();
    registerReceiver(receiver ,new IntentFilter("action_to_perform"));
    }

    public void onPause(){
    super.onPause();
    unregisterreceiver(receiver);
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM