如何向 Broadcast Receiver 声明许多活动? Android

How to declarare to Broadcast Receiver for many activities? Android

我想为应用程序的所有活动声明 Broadcast Receiver,以检测互联网连接何时结束。完成了吗?谢谢

清单

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

Class 扩展 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,并从那里创建子class。

例如...

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 中注销了它,因此当 activity 不存在时它不活动。

我们还在 onResume 中更新 isConnected 状态,因为在首次使用 isConnected 之前我们可能会或可能不会收到 networkStateChange..

现在我们可以创建一个使用 isConnected 字段来执行某些操作的子class..

在所有活动中,创建一个广播接收器的实例并注册广播接收器。

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