如何申报广播接收器进行多项活动? Android的

时间:2016-10-13 08:05:56

标签: android android-activity connection broadcastreceiver

我想向应用程序的所有活动声明广播接收器,以便在互联网出现时进行检测。一如既往?谢谢

清单

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

3 个答案:

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