BroadCastReceiver
2016-02-24 23:47
260 查看
1.广播接收器:BroadCastReceiver
BroadCast:广播器
2.注册的两种方式:
(1)静态注册;在AndroidManifest.xml中注册
(2)动态注册:
3.静态注册与动态注册的区别:
4.自定义广播:需要发送广播,而系统广播不需要发送(若系统广播为动态广播,则需要注册广播)
5.有序的广播:
5.广播的生命周期:
四大组件之一,需要注册 系统级别的通知(通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。)
BroadCast:广播器
Broadcast是一种广泛运用的在应用程序之间传输信息的机制。而BroadcastReceiver是对发送出来的Broadcast进行过滤接受并响应的一 类组件。
2.注册的两种方式:
(1)静态注册;在AndroidManifest.xml中注册
使用步骤: 1.写一个类继承Broadcastreceiver实现onReceive(Context context, Intent intent)方法 2.在清单文件中注册你的广播 <receiver android:name=".MyBroadCaseReceiver2"> <intent-filter> <!--解锁的action--> <action android:name="android.intent.action.USER_PRESENT"/> </intent-filter> </receiver> 3.实现你的广播逻辑在onReceive()中 if(intent.getAction().equals("android.intent.action.USER_PRESENT")){ //解锁的时候 Toast.makeText(context,"解锁了",Toast.LENGTH_SHORT).show(); } 注意:一般监听系统都是需要权限的,必须开启权限才能监听 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>开机权限
(2)动态注册:
使用步骤: 1.创建一个广播,写一个类继承BroadCastReceiver,实现onReceive(Context context, Intent intent)方法 2.用代码写IntentFilter添加监听到action(在Activity中),然后调用registerReceiver()动态注册的方式进行注册 //创建一个广播对象 myReceiver = new MyReceiver(); //创建意图过滤器 IntentFilter intentFilter = new IntentFilter(); //锁屏过滤器 intentFilter.addAction(Intent.ACTION_USER_PRESENT); //动态注册广播.参数1:创建的广播;参数2:意图过滤器 registerReceiver(myReceiver,intentFilter); 3.实现你的广播逻辑在onReceive()中 public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("Intent.ACTION_USER_PRESENT")){ Toast.makeText(context,"解锁了",Toast.LENGTH_SHORT).show(); } } 4.在退出界面的时候,动态注册广播要解绑 protected void onDestroy() { super.onDestroy(); //特别注意:在退出界面的时候,动态注册广播要解绑 unregisterReceiver(myReceiver); }
3.静态注册与动态注册的区别:
a.静态注册在清单文件中进行,并在过滤器中添加action意图; 动态注册在java代码中并创建意图过滤器添加action,并且动态注册需要解绑 b.静态注册在应用退出之后仍然可以监听,动态注册只有在当前界面上注册有效
4.自定义广播:需要发送广播,而系统广播不需要发送(若系统广播为动态广播,则需要注册广播)
步骤: (1).创建一个广播(写一个类继承BroadCastReceiver,实现onReceive(Context context, Intent intent)方法) (2).定义一个频道(action字符串),在清单文件中注册 <receiver android:name=".MyBroadCastReceiver"> <intent-filter> <action android:name="com.action.TRANSLATE"/> </intent-filter> </receiver> (3).定义一个意图开启广播,并通过sendBroadcast()发送广播 Intent intent = new Intent(); //设置广播的action intent.setAction("com.action.TRANSLATE"); intent.putExtra("value","小花"); //发送广播 sendBroadcast(intent); (4)可以在广播中接收传过去的值 //接收到传递过来的值 String data = intent.getStringExtra("value");
5.有序的广播:
优先级: 一般情况下不设置广播优先级的情况下所有相同广播接收到消息都是同时的 有序广播设置他们的优先级后: 1.高级别的广播优先接收数据 2.高级别的广播可以中断广播继续向下进行传递 3.更改高级别接收到的广播数据 , 然后在继续向下传递 优先级在清单文件中的intent-filter设置,优先级别的值为-1000到1000,值越大,优先级越高 <receiver android:name=".MyBroadCastReceiver"> <!--android:priority优先级,取值为-1000到1000,值越大,优先级越高--> <intent-filter android:priority="1000"> <action android:name="com.niu.receiver"/> </intent-filter> </receiver> 使用有序广播的步骤: (1).创建一个广播(写一个类继承BroadCastReceiver,实现onReceive(Context context, Intent intent)方法) (2).定义一个频道(action字符串),在清单文件中注册(可以写系统的action也可以自定义) <receiver android:name=".MyBroadCastReceiver"> <!--android:priority优先级,取值为-1000到1000,值越大,优先级越高--> <intent-filter android:priority="0"> <action android:name="com.niu.receiver"/> </intent-filter> </receiver> (3).定义一个意图开启广播,并通过sendOrderedBroadcast()发送有序广播 Intent intent = new Intent(); intent.setAction("com.niu.receiver"); intent.putExtra("value", "小花"); //sendOrderedBroadcast()发送有序广播方法 //参数1.intent, 参数2:自定义的权限 sendOrderedBroadcast(intent,"com.niu.receiver"); **自定义权限(在清单文件中) <permission android:name="android.myaction.TAN"/> <uses-permission android:name="android.myaction.TAN"/> (4)可以在优先级高的广播中用abortBroadcast()方法中断优先级别低广播 将值进行修改传递 Bundle bundle = new Bundle(); //增加新值进行传递 bundle.putString("order","123"+data); setResultExtras(bundle); 在优先级比当前广播低的广播中可以获得修改的值: String value = getResultExtras(true).getString("order");
5.广播的生命周期:
生命周期只有十秒左右,如果在onReceive()内做超过十秒内的事情,就会报ANR错 调用对象-->实现onReceiver()-->结束 注意: BroadCastReceiver的生命周期只有10 秒 在BroadCastReceiver中不能做耗时操作 应该通过Intent给Service,由service来完成 不能使用子线程
相关文章推荐
- 读算法导论日志:插入排序
- 在Gulp中使用BrowserSync
- 基本数据结构
- 利用BroadCastReceiver读取短信
- HTTP协议的主要特征
- java发送Email代码实现
- 详解ios文件系统文件目录读写操作-备用
- hive UDF 提取文本中的国家名
- 利用BroadCastReceiver做网络判断
- poj 3468 A Simple Problem with Integers 线段树/树状数组
- vector和list区别【转】
- json_encode如何防止汉字转义成unicode
- Core Data-备用
- [Lintcode]Remove Element
- Spark源码分析之七:Task运行(一)
- Leetcode 299:Bulls and Cows
- 强悍,Zabbix 3.0 趋势预测,预警故障
- 【CSS3】设置动画的播放状态
- 2016/02/24 codes
- 数组去重复