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观察的内部类.
我将粘贴一些代码片段来说明如何应用.
这是NetworkChangeReceiver和NetworkObservable班级.
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()方法添加任何参数来传递网络状态.
希望这可能有所帮助.
| 归档时间: |
|
| 查看次数: |
3575 次 |
| 最近记录: |