android_有序广播
来源:互联网 发布:试述数据库设计的步骤 编辑:程序博客网 时间:2024/05/29 11:51
自定义有序广播的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);
- }