如何向 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);
}
我想为应用程序的所有活动声明 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);
}