[英]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.