一、使用BroadcastRceiver
1、创建BroadcastRceiver(MyRceiver),重写OnReceiver:
public void onReceive(Context context, Intent intent) {
System.out.println("接收到了消息,消息内容是:"+intent.getStringExtra("data"));
}
2、在主布局添加一个按钮:
<Button
android:text="发送消息"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnSendMsg" />
3、实现发送消息按钮的监听功能:
findViewById(R.id.btnSendMsg).setOnClickListener(this);
public void onClick(View v) {
switch(v.getId()){
case R.id.btnSendMsg:
Intent i = new Intent(this,MyReceiver.class);
i.putExtra("data","Android");
sendBroadcast(i);
break;
}
}
二、动态注册和注销BroadcastReceiver
在某种情况,我们并不希望BroadcastReceiver始终从处于监听状态。这就需要我们动态地注册和注销BroadcastReceiver。
1、删除AndroidManifest.xml中关于MyReceiver的配置,则不能再发送消息:
<receiver
android:name=".MyReceiver"
android:enabled="true"
android:exported="true"></receiver>
2、在主布局中添加注册和注销按钮:
<Button
android:text="注册接收器"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnRes" />
<Button
android:text="注销接收器"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnUnres" />
3、MyReceiver文件:
public static final String ACTION = "com.w.learnbroadcastrceiver.intent.action.MyReceiver";
4、功能实现:
//防止重复注册多个Receive
private MyReceiver receiver = null;
findViewById(R.id.btnRes).setOnClickListener(this);
findViewById(R.id.btnUnres).setOnClickListener(this);
public void onClick(View v) {
switch(v.getId()){
case R.id.btnSendMsg:
// Intent i = new Intent(this,MyReceiver.class);
Intent i = new Intent(MyReceiver.ACTION); //隐式Intent
i.putExtra("data","Android");
sendBroadcast(i);
break;
case R.id.btnRes:
if(receiver == null){
receiver = new MyReceiver();
registerReceiver(receiver,new IntentFilter(MyReceiver.ACTION));
}
break;
case R.id.btnUnres:
if(receiver != null){
unregisterReceiver(receiver);
receiver = null;
}
break;
}
}
三、BroadcastRceiver的优先级
1、Androidmanifest.xml中后注册的Receiver先接收到消息,即后注册的Receiver优先级高。
<intent-filter>中属性 android:priority="10",优先级越高就越先接收到消息
2、优先级高的receiver不想让后续的receiver接收到消息,如何做(MyReceiver.java)?
public void onReceive(Context context, Intent intent) {
System.out.println("MyReceiver 接收到了消息");
abortBroadcast(); //中断广播(MyReceiver比MyReceiver1优先级高的情况)
}
而MainActivity.java中:
//sendBroadcast(i);
sendOrderedBroadcast(i,null); //参数分别代表Intent对象和权限