BroadcastReceiver更新UI

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Leo_eight/article/details/50170373

通过BroadcastReceiver可以监听系统发出被通知, 如是否联网, 但不能在BroadcastReceiver访问Activity, 如果想根据联网状态来更新UI怎么做?


把BroadcastReceiver作为Activity的内部类!


如此做可以实现两个重要的功能:
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>


猜你喜欢

转载自blog.csdn.net/Leo_eight/article/details/50170373