Android 广播接收器 BroadcastReceiver 注册、注销、优先级、拦截
来源:互联网 发布:java 接收post文件 编辑:程序博客网 时间:2024/06/16 18:03
BroadcastReceiver也就是“广播接收者”的意思,顾名思义,它就是用来接收来自系统和应用中的广播。
在Android系统中,广播体现在方方面面,例如当开机完成后系统会产生一条广播,接收到这条广播就能实现开机启动服务的功能;当网络状态改变时系统会产生一条广播,接收到这条广播就能及时地做出提示和保存数据等操作;当电池电量改变时,系统会产生一条广播,接收到这条广播就能在电量低时告知用户及时保存进度,等等。
Android中的广播机制设计的非常出色,很多事情原本需要开发者亲自操作的,现在只需等待广播告知自己就可以了,大大减少了开发的工作量和开发周期。而作为应用开发者,就需要数练掌握Android系统提供的一个开发利器,那就是BroadcastReceiver。下面我们就对BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。
首先,我们来演示一下创建一个BroadcastReceiver,并让这个BroadcastReceiver能够根据我们的需要来运行。
要创建自己的BroadcastReceiver对象,我们需要继承android.content.BroadcastReceiver,并实现其onReceive方法。下面我们就创建一个名为MyReceiver广播接收者:
BroadcastReceiver逐一地分析和演练,了解和掌握它的各种功能和用法。
首先,我们来演示一下创建一个BroadcastReceiver,并让这个BroadcastReceiver能够根据我们的需要来运行。
要创建自己的BroadcastReceiver对象,我们需要继承android.content.BroadcastReceiver,并实现其onReceive方法。
创建一个新工程LearnBroadcastReceiver,一个空Activity
广播接收器MyReceiver
用于显示Intent调用
MyReceiver1
隐式Intent
拦截广播
MyReceiver2
隐式Intent
实现主动注册也注销,拦截广播
创建一个MyReceiver, MyReceiver1, MyReceiver2 广播接收类扩展至
public class MyReceiver extends BroadcastReceiver { public MyReceiver() { } @Override public void onReceive(Context context, Intent intent) { System.out.println("第0个广播接收器接收到消息是:====="+intent.getStringExtra("data")); }}
public class MyReceiver1 extends BroadcastReceiver { public MyReceiver1() { } @Override public void onReceive(Context context, Intent intent) { System.out.println("第1个广播接收器接收到消息是:"+intent.getStringExtra("data")); if (intent.getStringExtra("isLanJie").equals("TRUE")) { abortBroadcast(); //拦截广播,不让优先级别低的接收该到消息 } }}
public class MyReceiver2 extends BroadcastReceiver { public static final String ACTION="com.czg.com.learnbroadcastreceiver.intent.action.MyReceiver2"; public MyReceiver2() { } @Override public void onReceive(Context context, Intent intent) { System.out.println("第2个广播接收器接收到消息是:" + intent.getStringExtra("data")); if (intent.getStringExtra("isLanJie").equals("TRUE")){ abortBroadcast(); //拦截广播,不让优先级别低的接收该到消息 } }}
修改androidManifest.xml中广播接收器
<receiver android:name=".MyReceiver" android:enabled="true" android:exported="true" > </receiver> <!--<receiver android:name=".MyReceiver2" >--> <!--<intent-filter>--> <!--<action android:name="com.czg.com.learnbroadcastreceiver.intent.action.MyReceiver2" />--> <!--</intent-filter>--><!--</receiver>--> <receiver android:name=".MyReceiver1" android:enabled="true" android:exported="true" > <intent-filter android:priority="1"> <action android:name="com.czg.com.learnbroadcastreceiver.intent.action.MyReceiver2" /> </intent-filter></receiver>
在创建完我们的MyReceiver2之后,还不能够使它进入工作状态,我们需要为它注册一个指定的广播地址。没有注册广播地址的BroadcastReceiver就像一个缺少选台按钮的收音机,虽然功能俱备,但也无法收到电台的信号。
public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button bSend; private MyReceiver2 myReceiver2=null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bSend=(Button) findViewById(R.id.btnSendMsg); bSend.setOnClickListener(this); findViewById(R.id.btnReg).setOnClickListener(this); findViewById(R.id.btnUnReg).setOnClickListener(this); findViewById(R.id.btnsendYinShi).setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.btnSendMsg: //发送消息 Intent intent=new Intent(this,MyReceiver.class); intent.putExtra("data", "消息来自czg"); sendBroadcast(intent); break; case R.id.btnsendYinShi: //没有自动注册的广播接收器自能用隐式的Intent进行创建(没有告诉要发送给哪个接收器,所有的接收器都可以接受到,优先级比较高的接收器可以根据需要拦截后面接收的的接收) Intent intent2=new Intent(MyReceiver2.ACTION); intent2.putExtra("data","消息来自czg"); CheckBox cb= (CheckBox) findViewById(R.id.checkBox); if (cb.isChecked()==true){ intent2.putExtra("isLanJie","TRUE"); }else { intent2.putExtra("isLanJie","FALSE"); } //sendBroadcast(intent2); sendOrderedBroadcast(intent2, null); //发送可以被拦截的广播,第二个参数可以指定权限 break; case R.id.btnReg: //注册 if (myReceiver2==null){ myReceiver2=new MyReceiver2(); registerReceiver(myReceiver2,new IntentFilter(MyReceiver2.ACTION)); } break; case R.id.btnUnReg: //注销 if (myReceiver2!=null){ unregisterReceiver(myReceiver2); myReceiver2=null; } break; } }}
- Android 广播接收器 BroadcastReceiver 注册、注销、优先级、拦截
- BroadCastReceiver android 广播接收器
- Android 广播接收器BroadcastReceiver
- android-----BroadcastReceiver广播接收器
- Android-BroadcastReceiver广播接收器
- Android 广播接收器注册与注销源码分析
- BroadcastReceiver(一)在AndroidManifest.xml中配置的广播接收器(自动注册注销)
- Android 广播接收器(BroadcastReceiver)
- android BroadcastReceiver(广播接收器)【转载】
- Android-(广播接收器)BroadcastReceiver-2
- Android BroadcastReceiver广播接收器详解
- Android 广播接收器BroadcastReceiver(一)
- Android 广播接收器BroadcastReceiver(二)
- Android 广播接收器BroadcastReceiver(三)
- Android 广播接收器BroadcastReceiver(四)
- Android 广播接收器BroadcastReceiver(五)
- Android 广播接收器BroadcastReceiver(六)
- Android广播接收器(BroadcastReceiver)
- jquery $.getJSON()跨域请求
- TabControl可实现效果及案例
- ANT:基于JavaEE的项目构建
- object-c画笔的简单实现
- CString与char的相互转换
- Android 广播接收器 BroadcastReceiver 注册、注销、优先级、拦截
- 动态规划之合唱队形问题
- c#上iOS apns p12文件制作记录
- 数据库集群
- 关于npm的环境变量配置、prefix
- Object-C 中各数据类型转换 NSData转NSString,Byte,UIImage
- Apache 安全设置(持续记录)
- 2016太原网络营销师郭文军教你如何利用网站赚钱?
- 使用“cmd /c start”时遇到路径中含有空格的解决方法