现在的位置: 主页 > 公司荣誉 > 文章列表

Android 四大组件学习之BroadcastReceiver四

作者:合肥瑶海区海美电器服务部 来源:www.an128l.com 未知发布时间:2017-09-12 15:45:17
Android 四大组件学习之BroadcastReceiver四

本节学习系统中特殊的广播接收者。

我们前面几节不是说了,当广播接受者一旦注册到系统中,当系统发送的广播和你注册的广播的action匹配时,系统就会启动广播接收者所在的进程。除非用户手动停止广播接收者所在的进程。但是生活中有这样一种情况,比如说:我在玩网络游戏,假设说游戏本身在系统电量低的情况下,会自动保存当前游戏的进度,也就是存档的。可以这么说,此广播接受者只有在用户玩游戏时才需要启动,别的时候用户是不需要的。如果此广播接收者一直常驻于系统,那不是很浪费系统资源。所以我们就需要动态的启动广播接收者,和停止广播接收者。可是大家知道,广播接收者只要在清单文件中注册过了的,就会永远启动的。所以唯一的办法就是不在清单文件中注册,在代码中动态注册。

说了这么多,就是说可以用代码动态的注册广播接收者。

说到在代码中注册广播接收者,那Android系统中规定,屏幕锁屏和解锁,以及电量改变必须用代码注册,在清单文件中注册是不起作用的。那是因为,屏幕锁屏和解锁,以及电量改变事件太频繁发生了。如果在清单文件中注册,将会对系统消耗很大。

那我们就用屏幕解锁和锁屏实现代码中注册广播接收者

这次我们用服务去创建广播接收者

Activity的代码:也就是两个按钮,一个用于创建创建服务,一个用于停止服务

public class MainActivity extends Activity { Intent intent; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); intent = new Intent(this, ScreenService.class); } //启动服务 public void openScreen(View v) { Log.i(MainActivity, 启动广播接收者服务); startService(intent); } //关闭服务 public void closeScreen(View v) { Log.i(MainActivity, 关闭广播接收者服务); stopService(intent); } } 然后Service的代码: public class ScreenService extends Service { private ScreenReceiver sReceiver; @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // 注册广播接收者 super.onCreate(); //创建一个广播接收者 sReceiver = new ScreenReceiver(); //指定接收那种类型的广播 IntentFilter filter = new IntentFilter(); //指定关屏幕和开屏幕 filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); //注册广播接收者 registerReceiver(sReceiver, filter); Log.i(ScreenService, 广播接受者已注册); } @Override public void onDestroy() { // 销毁广播接收者 super.onDestroy(); unregisterReceiver(sReceiver); Log.i(ScreenService, 广播接受者已销毁); } } 在Service的onCreate方法中注册广播接收者,在Destory方法中销毁广播接收者

最终广播接收者的代码:

public class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if(Intent.ACTION_SCREEN_OFF.equals(action)) { //接收到管屏幕的广播 Log.i(ScreenReceiver, 屏幕关闭!); } else if(Intent.ACTION_SCREEN_ON.equals(action)) { //接收到开屏幕的广播 Log.i(ScreenReceiver, 屏幕开启!); } } }
清单文件中,需要要配置服务,广播接收者不需要配置 运行效果如下:

\

ok。 就到这里,大家了解下就行

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉网站制作 http://wuhan.666rj.com

上一篇:如何策划一个有价值的网站 下一篇:最后一页