【Android】BroadCast广播机制应用与实例
2016-04-07 11:29
609 查看
如何编写广播接收器
第一步:需要继承BroadcastReceiver类,覆写其中的onReceive()方法. [java] view
plain copy
class SMSReceiver
extends BroadcastReceiver {
//接收到广播会被自动调用
@Override
public void onReceive (Context context, Intent intent) {
//从Intent中获取action
…your code here…
}
}
第二步:定义好广播接收器还不行,必须向系统注册以便让其知道该接收器可以处理哪些广播事件。
常见方式是采用静态注册,修改MENIFEST.xml文件, 在<application></application>中加入receiver标签.
[html] view
plain copy
<application>
<activity name=""/>
<receiver android:name=".MyBroadcastReceiver">
<!-- intent过滤器,指定可以匹配哪些intent, 一般需要定义action 可以是自定义的也可是系统的 -->
<intent-filter>
<action android:name="pushAction"/>
</intent-filter>
</receiver>
</application>
动态注册广播接收器
在某个Activity中,我们可以用代码来实现动态注册://生成一个BroadcastReceiver对象,SMSReceiver 继承BroadCast或者写成匿名内部类广播接收
SMSReceiver smsReceiver = new SMSReceiver();
//生成一个IntentFilter对象
IntentFilter filter = new IntentFilter();
filter.addAction(“pushAction”);
//将BroadcastReceiver对象注册到系统当中
//此处表示该接收器会处理短信事件
TestBC1Activity.this.registerReceiver(smsReceiver, filter);
//匿名内部类广播接收者
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String str = intent.getStringExtra("push");
L.v(TAG,"str=="+str);
tvNumInfro.setText("");
tvNumInfro.setVisibility(View.GONE);
}
};
第三步:此时我们可以发送一个广播事件出去,代码如下:
[java] view
plain copy
Intent intent = new Intent();
intent.setAction("pushAction"); intent.putExtra("push", "pushhide");
sendBroadcast(intent);//发送广播事件
静态注册和动态注册的区别
1)静态注册:在AndroidManifest.xml注册,android不能自动销毁广播接收器,也就是说当应用程序关闭后,还是会接收广播。2)动态注册:在代码中通过registerReceiver()手工注册.当程序关闭时,该接收器也会随之销毁。当然,也可手工调用unregisterReceiver()进行销毁。
应用实例
import android.app.Activity; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class BroadCastActivity1 extends Activity{ Intent intent = new Intent(); //new 一个广播对象 BroadCastTest1 bCastTest1 = new BroadCastTest1(); @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //发送广播 findViewById(R.id.button1).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub、 //参数是bc.test101才可以接收,接收的内容是静态的 intent.setAction("bc.test102"); intent.putExtra("name", "静态的"); sendBroadcast(intent); // sendOrderedBroadcast(intent, null); } }); //动态注册 findViewById(R.id.button2).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("bc.test102"); //直接指出是注册到BroadCastTest1这个类里面 BroadCastActivity1.this.registerReceiver(bCastTest1, intentFilter); //设置一些参数,参数是bc.test102才可以接收,接收的内容是静态的 } }); findViewById(R.id.button3).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub unregisterReceiver(bCastTest1); finish(); } }); } }
广播类
[java] view
plain copy
package com.app.test02;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.widget.Toast;
public class BroadCastTest1 extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
String name = intent.getStringExtra("name");
Toast.makeText(context, "广播1:" + name, 1000).show();
System.out.println(1);
}
}
广播的优先级: 1.发送广播的形式 sendBroadcast():发送普通广播。 sendOrderedBroadcast():发送有序广播。 以上两个方法都有多个重载方法,根据不同的场景使用,最简单的莫过于直接传递一个Intent来发送一个广播。 2.优先级 (android:priority) 在代码中使用Content.registerReceiver(BroadcastReceiver receiver, IntentFilter filter)进行注册,在使用完毕使用Content.unregisterReceiver(BroadcastReceiver receiver)方法进行注销。 使用清单文件AndroidManifest.xml注册,在<application/>节点中,使用<receiver/>节点注册,并用android:name属性中指定注册的BroadcastReceiver对象,
一般还会通过<Intent-filter/>指定<action/>和<category/>,并在<Intent-filter/>节点中通过android:priority属性设置BroadcastReceiver的优先级,在-1000~1000范围内,数值越到优先级越高。 虽然Android系统提供了两种方式注册BroadcastReceiver,但是一般在实际开发中,还是会使用清单文件进行注册: <receiver android:name="cn.bgxt.Broadcastdemo.Basic.BasicBroadcast"> <intent-filter android:priority="100"> <action android:name="cn.bgxt.Broadcastdemo.Basic.broadcast"/> </intent-filter> </receiver>
demo地址 http://download.csdn.net/detail/qq_26296197/9483636
相关文章推荐
- Android中BroadcastReceiver(异步接收广播Intent)的使用
- Android使用BroadcastReceiver实现手机开机之后显示画面的功能
- Android提高之BroadcastReceiver实例详解
- 详解Android中BroadCastReceiver组件
- Android编程四大组件之BroadcastReceiver(广播接收者)用法实例
- Android开发之BroadcastReceiver用法实例分析
- 广播 BroadCastReceiver
- BroadcastReceiver应用详解
- Android中利用广播接受者简单几步实现拨号显示归属地
- 拦截短信
- Android中BroadcastReceiver理解
- 关于安卓手机开机自启动APP无法成功的问题
- android 监听SDCard安装和卸载的代码
- BroadcastReceiver实现android来去电录音功能(外录)
- 小米手机不支持对去电的拦截解决方案(BroadcastReceiver)
- BroadcastReceiver之开机自启动程序
- 工作笔记(1)--Android平板禁用虚拟按键
- 一步一步的学习BroadCastReceiver
- android广播经典小例子