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

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

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

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

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

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

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

public class MainActivity extends Activity {Intent intent;@Overrideprotected 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;@Overridepublic IBinder onBind(Intent intent) {// TODO Auto-generated method stubreturn null;}@Overridepublic 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", "广播接受者已注册");}@Overridepublic void onDestroy() {// 销毁广播接收者super.onDestroy();unregisterReceiver(sReceiver);Log.i("ScreenService", "广播接受者已销毁");}
}

在Service的onCreate方法中注册广播接收者,在Destory方法中销毁广播接收者

最终广播接收者的代码:

public class ScreenReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubString action = intent.getAction();if(Intent.ACTION_SCREEN_OFF.equals(action)){//接收到管屏幕的广播Log.i("ScreenReceiver", "屏幕关闭!");}else if(Intent.ACTION_SCREEN_ON.equals(action)){//接收到开屏幕的广播Log.i("ScreenReceiver", "屏幕开启!");}}
}

清单文件中,需要要配置服务,广播接收者不需要配置

    <applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><activityandroid:name=".MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><service android:name="com.demo.screenactivity.ScreenService"></service></application>

运行效果如下:

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

Android 四大组件学习之BroadcastReceiver四相关推荐

  1. Android四大组件系列7 Broadcast广播机制(上)

    一 概述 广播 (Broadcast) 机制用于进程或线程间通信,广播分为广播发送和广播接收两个过程,其中广播接收者 BroadcastReceiver 是 Android 四大组件之一.Broadc ...

  2. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  3. android进阶(九)-----Android四大组件的工作过程

    一.四大组件的运行状态 android四大组件中国除了BroadcastReceiver以外,其他三种都必须在AndroidManifest中注册,对于BroadcastReceiver既可以在And ...

  4. Android四大组件之BroadCastReceiver

    1. 基本概念 在Android 中,Broadcast 是一种广泛运用的在应用程序之间传输信息的机制.而BroadcastReceiver 是对发送出来的Broadcast 进行过滤接受并响应的一类 ...

  5. Android四大组件---BroadcastReceiver

    前言: BroadcastReceiver(广播接收器),属于 Android 四大组件之一 在 Android 开发中,BroadcastReceiver 的应用场景非常多 今天,我将详细讲解关于B ...

  6. Android四大组件之——Broadcast学习总结

    1.Broadcast概念 是一个全局的监听器,属于Android四大组件之一.Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制.而BroadcastReceiver( ...

  7. android 广播的权限,Android四大组件详解之BroadcastReceiver广播接收者

    Android四大组件详解---BroadcastReceicer广播接收者 广播有两个角色,一个是广播发送者,另一个是广播接收者. 广播按照类型分为两种,一种是全局广播,另一种是本地广播 全局广播: ...

  8. Android 四大组件通信核心

    前言 系列文章: Android Activity创建到View的显示过程 Android 四大组件通信核心 Android 系统启动到App 界面完全展示终于明白(图文版) 我们知道Android ...

  9. Kotlin第七章: Android四大组件

    1. 四大组件 四大组件是每一个Android人必须要会,要掌握的知识点,因为他们是我们在日常开发工作中打交道最频繁的组件,而且他们四个在不同的领域扮演着极其重要的角色. Activity: 负责用户 ...

  10. Android四大组件总结

    四大组件系列文章 Activity总结和补充:Activity总结和补充_fdsafwagdagadg6576的博客-CSDN博客 Android Binder&Aidl理解和补充:Andro ...

最新文章

  1. ECS 游戏框架背景知识
  2. 【转】DXErrorProvider与DxValidationProvider的使用
  3. 1.react生命周期详解(2020.12.05)
  4. python上机实验报告读取文件_Python程序设计实验报告八:文件
  5. C++笔记----运算符重载
  6. 全角字符unicode码对应表
  7. 检测文章相似度的方法?文章原创度检测工具免费
  8. hdlbits刷题记录
  9. MATLAB中median函数
  10. SCCM推送升级Win10
  11. 产品经理常用的三款工具
  12. 手机拍证件照的工具哪个好用
  13. 哪种款式的耳机不伤耳朵,五款不伤害耳朵听力的骨传导耳机推荐
  14. java递归堆栈溢出_【java】递归次数过多导致堆栈溢出
  15. MapReduce核心思想
  16. MYSQL跨库查询的优缺点
  17. 【赛氪 Saikr】不正方形(数学、平面几何 ps:今天打了假赛)
  18. 信息检索——名词解释、简答题
  19. 算法分析师2名: 无线互联网的海外电商平台 要聪明
  20. 用C++品尝Vista美味:界面的毛玻璃效果——涨姿势

热门文章

  1. 电影推荐之《白鹿原》 隐私策略(Privacy policy)
  2. 有限状态机FSM的写法
  3. C++中char[]转string
  4. 学了这几招,社交时人人都对你刮目相看
  5. 前端学习总结【103天】:CSS——不用JavaScript实现tab标签切换的两种方法
  6. redis源码编译和调试
  7. Could not find artifact com.taotao:taotao-parent:pom原因
  8. “Error:(1, 1) java: 非法字符: '\ufeff'”错误解决办法
  9. js 中通过 var 在声明的变量中写方法
  10. ubuntu编译安装vim7.4