由于昨天有人问我广播的问题,当时我也有点忘记了,特地来写篇博客记录一下。
发送广播:
一、标准广播:
在广播发送出去后,所有的广播接收器都能同时接收这条广播。
Intent intent = new Intent("com.example.android_broadcast");
sendBroadcast(intent);
二、有序广播:
在广播发送出去后,只有一个广播接收器能先接收这条广播,当这个广播接收器处理完成后,广播才继续发送出去,如此继续下去。
Intent intent = new Intent("com.example.android_broadcast");
sendOrderedBroadcast(intent, null);
// sendOrderedBroadcast()方法接收两个参数,第一个参数仍然是Intent,第二个参数是一个与权限相关的字符串,这里传入null就行了。
接收广播:
接收广播的时候,我们必须注册才能接收广播,我们可以在代码里注册(动态接收)也可以在 AndroidManifest.xml 中注册(静态接收)。
代码里注册(动态接收):这种注册的接收必须在程序启动后才能接收广播,而且这种注册可以灵活控制注册与注销。
AndroidManifest.xml 中注册(静态接收):这种注册的接收可以在程序不启动的情况下接收广播。
一、动态接收:
新建一个Mybroadcastreceiver类继承BroadcastReceiver,当Mybroadcastreceiver接收到相对应的广播时, onReceive()方法就会得到执行。
package com.example.android_broadcast;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class Mybroadcastreceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
// 处理相关逻辑
}
}
package com.example.android_broadcast;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
public class MainActivity extends Activity {
private Mybroadcastreceiver mybroadcastreceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建intentFilter实例并添加action
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("com.example.android_broadcast");
//创建Mybroadcastreceiver实例
mybroadcastreceiver = new Mybroadcastreceiver();
//调用 registerReceiver()方法进行注册,使得mybroadcastreceiver接收"com.example.android_broadcast"广播
registerReceiver(mybroadcastreceiver, intentFilter);
Intent intent = new Intent("com.example.android_broadcast");
sendBroadcast(intent, null);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
//注销广播
unregisterReceiver(mybroadcastreceiver);
}
}
二、静态接收:
在AndroidManifest.xml中添加代码:
<receiver android:name=".Mybroadcastreceiver" >
<intent-filter>
<action android:name="com.example.android_broadcast" />
</intent-filter>
</receiver>
三、有序接收:
在AndroidManifest.xml中添加代码:通过 android:priority 属性给广播接收器设置了优先级,优先级比较高的广播接收器就可以先收到广播。
有序接收只能静态注册。
<receiver
android:name=".Mybroadcastreceiver"
android:permission="100" >
<intent-filter>
<action android:name="com.example.android_broadcast" />
</intent-filter>
</receiver>