添加链接描述广播本质上就是一个全局的监听器
广播有静态跟动态两种
动态注册是在Java类中注册,而静态注册是在AndroidManifest.xml中注册。
动态广播会随着所注册的Activity的消失而跟着消失,而静态广播即使APP被关闭了,也是可以接收到广播的。
- 主要需要学习的单词
单词 | 中文 |
---|---|
broadcast | 广播 |
receiver | 接受者 |
register | 登记;注册 |
unregister | 移除注册;注销;取消注册; |
Destroy | 破坏;杀死;消灭;摧毁 |
- 自定义广播接收者
public class Mybroadcast2 extends BroadcastReceiver{
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
int i1=arg1.getIntExtra("i", 0);//接收传来的数据,传来的是什么类型就定义什么类型。
Toast.makeText(arg0, "发送成功"+i1, Toast.LENGTH_LONG).show();
}
}
1.新建一个类,继承自BroadcastReceiver,并重写onReceive()方法并在里面接收消息
- 静态注册
<receiver android:name="com.example.a1.Mybroadcast">
<intent-filter >
<action android:name="aaa"/>
</intent-filter>
</receiver>
- 发送广播
Intent i=new Intent("aaa");
int i2=1;//用于测试的值.
i.putExtra("i", i2);//把需要传输的数据导入进去,然后在接收器那边接收。
sendBroadcast(i);//发送广播
把i发送出去,当与注册中action相同是,即广播发送成功
- 动态注册
1.跟静态广播一样,先注册一个继承自BroadcastReceiver的新类。不需要注册。不过要把把广播接收者的对象实例化出来
Mybroadcast2 mybroad; //把广播接收者的对象实例化出来
mybroad=new Mybroadcast2(); //把广播接收者的对象实例化出来
IntentFilter filter=new IntentFilter("bbb");
//以代码方式注册广播
registerReceiver(mybroad, filter);
- 取消广播
protected void onDestroy(){
//取消注册广播接收者无法接收到广播
unregisterReceiver(mybroad);
super.onDestroy();
}