自定义有序广播的demo(具有优先级,可以修改广播内容)
1.优先级高的可以拦截传播内容(即终止在此优先级的接受者)
2.优先级高的还可以修改广播的内容后,再传播给低优先级的。
新建一个项目(Android0711Sender)广播发送者:
java代码如下:
package com.example.cookie.android0713sender;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
private EditText et_main_content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et_main_content = (EditText) findViewById(R.id.et_main_content);
}
public void send(View view){
//获取要广播的内容
String content=et_main_content.getText().toString();
//指定广播的名字
Intent intent=new Intent();
intent.setAction("com.example.cookie.android0713sender.cookie");
//指定广播的内容
intent.putExtra("content",content);
//发送无序广播
// sendBroadcast(intent);
//发送有序广播
sendOrderedBroadcast(intent,null);
}
}
2.新建两个接受者项目
package com.example.cookie.myreceiver01;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
/**
* Created by Administrator on 2017/7/13 0013.
*/
public class MyReceiver01 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
//获取广播名字
String action=intent.getAction();
if ("com.example.cookie.android0713sender.cookie".equals(action)){
//获取广播内容
// String content=intent.getStringExtra("content");
//获取结果
Bundle bundle=getResultExtras(true);
String content=bundle.getString("newContent");
Log.i("test","1号广播接收者接收的到内容为:"+content);
}
}
}
2号接收者
package com.example.cookie.myreceiver02;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.util.Log;
/**
* Created by Administrator on 2017/7/13 0013.
*/
public class MyReceiver02 extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action=intent.getAction();
if ("com.example.cookie.android0713sender.cookie".equals(action)){
String content=intent.getStringExtra("content");
Log.i("test","2号广播者接收到的信息为:"+content);
//判断
if (content.contains("免费")){
//不传播
abortBroadcast();
}
//改变广播的内容
//设置结果
Bundle bundle=new Bundle();
bundle.putString("newContent",content+",开玩笑的,嘻嘻嘻");
setResultExtras(bundle);
}
}
}
3.有序广播还可以设置他们的优先级(范围1000至-1000)
静态设置优先级的关键代码priority
<receiver android:name=".MyReceiver02">
<intent-filter android:priority="400">
<action android:name="com.example.cookie.android0713sender.cookie"></action>
</intent-filter>
动态设置优先级代码setPriority
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myReceiver01 = new MyReceiver01();
intentFilter = new IntentFilter();
intentFilter.addAction("com.example.cookie.android0713sender.cookie");
intentFilter.setPriority(200);
}