在Android中监控许多片段中的互联网连接

Ham*_*boh 2 android broadcastreceiver

我正在使用BroadcastReceiver来监控互联网连接的可能变化:

public class NetworkChangeReceiver extends BroadcastReceiver 
Run Code Online (Sandbox Code Playgroud)

现在,我需要分别检查ViewPager中的每个片段.因为如果用户变得连接,那么它将分别反映在每个片段的UI上.

如果我假设一次创建的片段的最大数量是3,那么我的问题是:

为每个片段定义一个NetworkChangeReceiver实例单独工作是危险的,或者我应该只定义一个?

gok*_*urt 15

您可以简单地将Observer Pattern结构应用于您的问题.

首先,您需要定义一个必须由Fragments观察的内部类.

我将粘贴一些代码片段来说明如何应用.

这是NetworkChangeReceiverNetworkObservable班级.

public class NetworkChangeReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(final Context context, final Intent intent) {
        Log.d("NetworkChangeReceiver","Connection status changed");
        getObservable().connectionChanged();
    }

    public static class NetworkObservable extends Observable{
        private static NetworkObservable instance = null;

        private NetworkObservable() {
            // Exist to defeat instantiation.
        }

        public void connectionChanged(){
            setChanged();
            notifyObservers();
        }

        public static NetworkObservable getInstance(){
             if(instance == null){
                 instance = new NetworkObservable();
             }
             return instance;
        }
    }

    public static NetworkObservable getObservable() {
        return NetworkObservable.getInstance();
    }
}
Run Code Online (Sandbox Code Playgroud)

此外,您需要为广播接收器设置清单.以下是如何做到这一点:

<receiver android:name="com.your.package.name.NetworkChangeReceiver" >
    <intent-filter>
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
       <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
    </intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)

每当你的连接改变onReceive方法被隐式调用.因此,您需要调用一个通知所有观察者的方法.

根据您的情况,观察员将成为Fragment课程.

我将粘贴另一个代码块来显示示例观察者类.

/*
* If you have memory concerns,
* you need to add your observer while application is resuming
* you need to remove that observer object while application is pausing...
* 
*/
public class FirstFragment extends Fragment implements Observer{        
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
    } 

    @Override
    public void onPause() {
      super.onPause();
      NetworkChangeReceiver.getObservable().deleteObserver(this);
    }

    @Override
    public void onResume() {
      super.onResume();
      NetworkChangeReceiver.getObservable().addObserver(this);
    }

    @Override
    public void update(Observable observable, Object data) {
        // Whenever connection changes, this method will be called so edit your text here
    }
}
Run Code Online (Sandbox Code Playgroud)

您还可以通过向notiftyObservers()方法添加任何参数来传递网络状态.

希望这可能有所帮助.