闲暇时间研究了下 BroadcastReciver 这里给大家做下分享。
广播有三种:1、无序广播
2、有序广播
3、滞留广播(不过这一方法现在已经过时)
我们常用的是无序广播和有序广播,其中无序广播设置广播拦截 abortBroadcast是不能用的。滞留广播,发送的是一个静态的广播,即使注册reciver在发送广播以后,同样可以接收到广播。
BroadCastReciver 的注册分为两种:1、代码中动态注册
2、manifest中静态注册。
代码中动态注册广播,当调用了unregisterReceiver 后,广播会被销毁
静态注册的广播,广播会随着程序的结束而结束
代码中动态注册的时候,在Activity中注册以后,还要注销reciver。我这里是在onCreate中注册,onDestory中注销,代码如下:
public class BoradcastActivity extends Activity {
private BC1 reciver;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_broadcast);
reciver =new BC1();
IntentFilter filter = new IntentFilter("BC1");//设置广播顾虑器
registerReceiver(reciver,filter);
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(reciver);
}
public void doClick(View v) {
Log.d("ljy", "doClick");
Intent intent = new Intent("BC1");//必须和上面广播过滤器中参数一致,reciver才能接收到广播。
intent.putExtra("msg", "test1");
Bundle bundle = new Bundle();
bundle.putString("msgString", "test2");
intent.putExtras(bundle);
// sendBroadcast(intent);无序广播
sendOrderedBroadcast(intent,null);//有序广播
}
广播接收器代码:
public class BC1 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("ljy","-----BC1----getStringExtra-------->"+intent.getStringExtra("msg"));
Log.d("ljy","------BC1----getBundle--------------->"+intent.getExtras().getString("msgString"));
}
}
上面是动态广播的注册,下面介绍静态广播的注册:
在manifest中添加如下代码即可注册:
<receiver android:name=".broadcast.BC1">
<intent-filter
android:priority="100">
<action android:name="BC1"></action>
</intent-filter>
</receiver>
这里的priority是设置广播的优先级,从-1000到1000.优先级越大,接收广播越靠前。
有序广播中如果了设置自定义权限,应用中如果没有设置此权限是无法接收此广播的。设置权限如下:
代码中:
public void doClick(View v) {
Log.d("ljy", "doClick");
Intent intent = new Intent("BC1");
intent.putExtra("msg", "test1");
Bundle bundle = new Bundle();
bundle.putString("msgString", "test2");
intent.putExtras(bundle);
// sendBroadcast(intent);无序广播
sendOrderedBroadcast(intent, "socct.application.myBroadCast");//有序广播
}
</pre><pre name="code" class="html">manifest中
<permission android:name="socct.application.myBroadCast"></permission> //自定义权限
<uses-permission android:name="socct.application.myBroadCast"></uses-permission> //应用权限 ,如果不添加该权限,应用是无法接收该广播的