我想向应用程序的所有活动声明广播接收器,以便在互联网出现时进行检测。一如既往?谢谢
清单
<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();
}
}
答案 0 :(得分:1)
最简单的方法是为从那里定义此行为和子类的所有活动创建父类。
例如......
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字段执行某些操作的子类。
答案 1 :(得分:0)
在所有活动中,创建广播接收器的实例并注册广播接收器。
ConnectionReceiver receiver = new ConnectionReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction("ACTION HERE");
getApplicationContext().registerReceiver(receiver, filter)
注意:取消注册接收器onStop()方法,因为在多任务处理期间在Android 7中调用onPause()方法并在onStart()中再次注册接收器而不是onResume()
答案 2 :(得分:0)
在您想要的活动中添加以下行
ConnectionReceiver receiver = new ConnectionReceiver();
public void onResume(){
super.onResume();
registerReceiver(receiver ,new IntentFilter("action_to_perform"));
}
public void onPause(){
super.onPause();
unregisterreceiver(receiver);
}