组件------BroadcastReceiver
来源:互联网 发布:java private class 编辑:程序博客网 时间:2024/06/08 11:21
组件------BroadcastReceiver
1、Broadcast(广播)介绍:
---是一种广泛运用在程序之间传输信息的机制。
2、-BroadcastReceiver广播接收者:
---是对发送出来的广播进行过滤接收并相应的一类组件,他就是用来接收来自系统和应用的广播。
3、用途:减少工作量和开发周期
---开机完成后系统会产生一条广播;(开机启动)
---当网络状态改变时系统会产生一条广播;()
---电量改变系统会发送一个广播
普通广播(无序)特点:
——同级别接收先后是随机的
——级别低的后收到广播
——接收器不能截断广播的继续传播,也不能处理广播。
——同级别动态注册高于静态注册
有序广播特点:
——同级别接受顺序是随机的。
——能截断广播的继续传播,高级别的广播接收器收到该广播后,可以决定是否截断
——接收器能截断广播的继续传播,也能处理广播
——同级别动态注册高于静态注册
补充:四大组件只有广播有两种注册方式!!!!
使用方法:
1、发送:
——首先在需要发送信息的地方,把要发送的信息和用于过滤的信息(如Action、Category)装入一个intent对象,
——然后通过调用:
Context.sendBroadcast()——//发送一条无序的广播
sendOrderBroadcast()——//发送一条有序的广播
sendStickyBroadcast()——//发送一条异步的广播
某一个方法,把Intent对象以广播方式发送出去。
2、接收:
——当Intent发送以后,所有已注册的BroadcastReceiver会检查注册时的IntentFilter是否与发送的Intent相匹配,
——若匹配则就会调用BroadcastReceivce的onReceiver()方法。
注意:BroadcastReceivce需要注册(静态或动态) 一些详细步骤:
静态注册:<receiver android:name="com.zxx.service.Reeciver">
设置优先级: <intent-filter android:priority="100"/>——默认是(-1000,1000)
设置过滤: <action android:name="zxx" />
动态注册:(代码没执行不会接收广播) ——>结束时一定要取消注册;
IntentFilter filter=new IntentFilter("aaaa");
Reeciver mreeciver=new Reeciver();
registerReceiver(mreeciver,filter);
????动态设置优先级???
数据处理:
Bundle类
bundle.putString("test", "广播处理的数据");
setResultExtras(bundle);
getResultExtras(true);
截断广播:abortBroadcast();
异步广播:(粘滞性滞留广播)当处理完厚度Intent,任然存在。这时候registerReceiver(reeciver,filter)还能收到他的值
直到你把他去掉,不能将处理结果传给下一个接收者,无法终止广播。
异步广播要加权限 : <uses-permission android:name="android.permission.BROADCAST_STICKY" />'
发送异步广播:sendStickyBroadcast(intent3);
!!!!注意!!!!:
——BroadcastReceiver生命周期只有10秒左右
——在BroadcastReceiver不能做比较耗时的操作
——应该通过发送Intent给Service让Service完成
——不能子线程
代码:
import android.app.Activity;import android.content.Intent;import android.content.IntentFilter;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.view.View;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);IntentFilter filter = new IntentFilter("zxx");BCR2 bcr2 = new BCR2();registerReceiver(bcr2, filter);}public void doClick(View v) {switch (v.getId()) {case R.id.receiver1:Intent mintent1 = new Intent();mintent1.putExtra("R.id.receiver1", "这是一条无序广播!!");mintent1.setAction("zxx");sendBroadcast(mintent1);// 发送一条无序的广播Log.i("tag", "点击了");break;case R.id.receiver2:Intent mintent2 = new Intent();mintent2.putExtra("R.id.receiver2", "这是一条有序广播!!");mintent2.setAction("zxx");sendOrderedBroadcast(mintent2, null);// 这是一条有序广播!!Log.i("tag", "点击了");break;case R.id.receiver3:Intent mintent3 = new Intent();mintent3.putExtra("R.id.receiver3", "这是一条异步广播!!");mintent3.setAction("zxx");sendStickyBroadcast(mintent3);// 这是一条异步广播!!IntentFilter filter = new IntentFilter("zxx");BCR3 bcr3 = new BCR3();registerReceiver(bcr3, filter);break;default:break;}}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();unregisterReceiver(new BCR1());}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// Handle action bar item clicks here. The action bar will// automatically handle clicks on the Home/Up button, so long// as you specify a parent activity in AndroidManifest.xml.int id = item.getItemId();if (id == R.id.action_settings) {return true;}return super.onOptionsItemSelected(item);}}
广播1类:
package zxx.Broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class BCR1 extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String s=intent.getStringExtra("R.id.receiver1");Log.i("tag", "BCR1"+s);Bundle bundle = getResultExtras(true);String s2 = bundle.getString("test");Log.i("tag", "BCR1接收到值:"+s2);}}
广播2类:
package zxx.Broadcast;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;public class BCR2 extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {String s=intent.getStringExtra("R.id.receiver2");Log.i("tag", "BCR2"+s);//abortBroadcast();//截断一条有序广播Bundle bundle = new Bundle();bundle.putString("test", "广播处理的数据");setResultExtras(bundle);}}
异步广播基本相似:清单文件中的静态注册:
<pre class="html" name="code"><pre class="html" name="code"><receiver android:name="zxx.Broadcast.BCR1" > <intent-filter > <action android:name="zxx" /> </intent-filter> </receiver>
布局文件只有三个按钮
- 组件------BroadcastReceiver
- BroadcastReceiver组件
- android 中BroadcastReceiver组件
- 四组件之BroadcastReceiver
- 四大组件之BroadcastReceiver
- android broadcastReceiver组件
- Android之BroadcastReceiver组件
- Android四大组件----BroadcastReceiver
- 四大组件之BroadcastReceiver
- Android BroadcastReceiver组件
- Android四大组件-BroadcastReceiver
- Android四大组件-BroadcastReceiver
- 四大组件之BroadcastReceiver
- android组件之一BroadCastReceiver
- Android四大组件----BroadcastReceiver
- android四大组件---BroadCastReceiver
- Android系统组件BroadcastReceiver
- 四大组件之BroadcastReceiver
- 移动应用商业化,如何借势平台能力
- JAVA中获取当前系统时间
- mark
- Storm/Cassandra集成错误:NoSuchMethodError: concurrent.Futures.withFallback
- 触发JVM进行Full GC的情况及应对策略
- 组件------BroadcastReceiver
- BZOJ 4104 [Thu Summer Camp 2015]解密运算
- Objective-C之KVC、KVO
- javascript常用的正则表达式
- HTML 5 <input> placeholder 属性
- 【iOS】去掉Tabbar顶部线条
- 文章标题
- Android Design - Photoshop 基本配置(1) - 画布大小
- Android,App 常用图标尺寸规范