这只是我在学Android过程中对于所学知识的巩固和方便日后查询的学习笔记,能帮助到有需要的和我一样的初学者就更好了
广播分为标准广播和有序广播
标准广播:所有接收器同时可以接收
有序广播:同一时刻只能有一个接收器接收到,并且可以决定是否继续向下传播
Receiver可在代码中注册(动态注册)也可在AndroidManifast.xml中注册(静态注册)
动态注册可在应用运行时接收广播
静态注册在任何时候都可以接收广播(最常见即是防止服务关闭用来自启)
首先
创建MyReceiver继承BroadCastReceiver并重写onReceive()即可
public class MyReceiver extends BroadCastReceiver{
@override
public void onReceive(Context context ,Intent intent){
//业务逻辑
}
}
动态注册
以Activity中为例
MyReceiver receive;
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setonContentView(R.layout.activity_main);
IntentFilter intentFilter=new IntentFilter();//动作捕捉
intentFilter.addAction("......")//所要捕捉的动作
receiver=new MyReceiver();
registerReceiver(receiver ,intentFilter);
}
protected void onDestroy(){
super.onDestroy();
unregisterReceiver(receiver)
}
动态注册后在销毁活动时一定要解除注册
静态注册
AndroidManifaste.xml中
<application>中
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:export="true"
<intent-filter>
<action android:name="......">//此为IntentFilter所要捕捉的动作,可自定
</intent-filter>
/>
发送自定义广播
以自定的 "can you receive this broadcast"为例
标准广播
这里采用静态注册的方式
onReceive()方法中添加一个Toast来表示接受到即可
AndroidManifast.xml中
<appication
<reciever
<intent-filter>
<action android:name="can you receive this broadcast" />
</intent-filter>
/>
/>
创建一个按钮button模拟触发
button.setonClickListener(....){
public void onClick(View v){
Intent intent=new Intent("can you receive this broadcast");
sendBroadcast(intent);
}
}
此时点击按钮MyReceiver即可接收到此广播
有序广播
与标准广播大体相似,只不过发送广播的方法不同
sendOrderBroadcast(intent,null);
//第二个参数为与权限有关的字符串,一般null即可
然后气<intent-filter>中设置优先级即可
<intent-filter android:priority="100">
捕捉相同动作的receiver优先级大的优先接收sendOrderBroadcast()发送的广播
在onReceive()方法中调用 abortBroadcast()可截断广播使之无法继续传递
本地广播
为避免自用的重要广播如发送了全局广播可能会被其他应用截获从而引起安全问题或者其他应用不断向自己发送垃圾广播
LocalBroadcastManager manager;
MyReceiver receiver;
manager=LocalBroadcastManager.getInstance(this);
......
void onClick(View v){
Intent intent=new Intetn("can you receive this broadcast");
manager.sendBroadcast(intent);
}
IntetnFilter filter=new IntentFilter();
filter.addAction("can you receive this broadcast");
reveiver=new MyReceiver();
manager.registerReceiver(receiver,filter);
}
protevted void onDestroy(){
super.onDestroy();
manager.unregisterReveiver(receiver);
}
本地广播无法使用静态注册来接收,因为发送本地广播时应用肯定已然启动了
如有错误欢迎指正