通过BroadcastReceiver可以监听系统发出被通知, 如是否联网, 但不能在BroadcastReceiver访问Activity, 如果想根据联网状态来更新UI怎么做?
如此做可以实现两个重要的功能:
1. 在BroadcastReceiver内部访问Activity的方法;
2. 根据Activity的生命周期开关BroadcastReceiver.
代码实现:
<span style="font-size:14px;color:#009900;">public class MainActivity extends Activity {
private static final String ACTION = "leo.myreceiver.action";
private MyReceiver myReceiver;
private IntentFilter intentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver = new MyReceiver();
intentFilter = new IntentFilter(ACTION);
startService(this, MyService.class); // 开启Service, 等待5秒后, 发送广播
}
@Override
protected void onResume() {
super.onResume();
registerReceiver(myReceiver, intentFilter); // 注册广播
}
@Override
protected void onPause() {
super.onPause(); // 取消注册广播
unregisterReceiver(myReceiver);
}
private void update(){
// 更新UI
}
private class MyReceiver extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
update();
}
}
}</span>