android_有序广播

来源:互联网 发布:试述数据库设计的步骤 编辑:程序博客网 时间:2024/05/29 11:51

自定义有序广播的demo具有优先级,可以修改广播内容

1.优先级高的可以拦截传播内容(即终止在此优先级的接受者)

2.优先级高的还可以修改广播的内容后,再传播给低优先级的。

新建一个项目(Android0711Sender)广播发送者:

Java代码如下:

[html] view plain copy
  1. package com.example.cookie.android0713sender;  
  2.   
  3. import android.content.Intent;  
  4. import android.support.v7.app.AppCompatActivity;  
  5. import android.os.Bundle;  
  6. import android.view.View;  
  7. import android.widget.EditText;  
  8.   
  9. public class MainActivity extends AppCompatActivity {  
  10.   
  11.     private EditText et_main_content;  
  12.   
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.         super.onCreate(savedInstanceState);  
  16.         setContentView(R.layout.activity_main);  
  17.         et_main_content = (EditText) findViewById(R.id.et_main_content);  
  18.   
  19.   
  20.     }  
  21.   
  22.     public void send(View view){  
  23.         //获取要广播的内容  
  24.         String content=et_main_content.getText().toString();  
  25.         //指定广播的名字  
  26.         Intent intent=new Intent();  
  27.         intent.setAction("com.example.cookie.android0713sender.cookie");  
  28.         //指定广播的内容  
  29.         intent.putExtra("content",content);  
  30.         //发送无序广播  
  31.        // sendBroadcast(intent);  
  32.         //发送有序广播  
  33.         sendOrderedBroadcast(intent,null);  
  34.   
  35.     }  
  36. }  

2.新建两个接受者项目

[html] view plain copy
  1. package com.example.cookie.myreceiver01;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.util.Log;  
  8.   
  9. /**  
  10.  * Created by Administrator on 2017/7/13 0013.  
  11.  */  
  12.   
  13. public class MyReceiver01 extends BroadcastReceiver {  
  14.   
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         //获取广播名字  
  18.         String action=intent.getAction();  
  19.         if ("com.example.cookie.android0713sender.cookie".equals(action)){  
  20.             //获取广播内容  
  21. //            String content=intent.getStringExtra("content");  
  22.             //获取结果  
  23.             Bundle bundle=getResultExtras(true);  
  24.             String content=bundle.getString("newContent");  
  25.             Log.i("test","1号广播接收者接收的到内容为:"+content);  
  26.   
  27.         }  
  28.     }  
  29. }  

2号接收者

[html] view plain copy
  1. package com.example.cookie.myreceiver02;  
  2.   
  3. import android.content.BroadcastReceiver;  
  4. import android.content.Context;  
  5. import android.content.Intent;  
  6. import android.os.Bundle;  
  7. import android.support.v7.app.AlertDialog;  
  8. import android.util.Log;  
  9.   
  10. /**  
  11.  * Created by Administrator on 2017/7/13 0013.  
  12.  */  
  13.   
  14. public class MyReceiver02 extends BroadcastReceiver {  
  15.     @Override  
  16.     public void onReceive(Context context, Intent intent) {  
  17.         String action=intent.getAction();  
  18.         if ("com.example.cookie.android0713sender.cookie".equals(action)){  
  19.             String content=intent.getStringExtra("content");  
  20.             Log.i("test","2号广播者接收到的信息为:"+content);  
  21.             //判断  
  22.             if (content.contains("免费")){  
  23.                 //不传播  
  24.                 abortBroadcast();  
  25.             }  
  26.   
  27.             //改变广播的内容  
  28.             //设置结果  
  29.             Bundle bundle=new Bundle();  
  30.             bundle.putString("newContent",content+",开玩笑的,嘻嘻嘻");  
  31.             setResultExtras(bundle);  
  32.         }  
  33.     }  
  34. }  

3.有序广播还可以设置他们的优先级(范围1000至-1000)

静态设置优先级的关键代码priority

[html] view plain copy
  1. <receiver android:name=".MyReceiver02">  
  2.             <intent-filter android:priority="400">  
  3.                 <action android:name="com.example.cookie.android0713sender.cookie"></action>  
  4.   
  5.             </intent-filter>  

动态设置优先级代码setPriority

[html] view plain copy
  1. @Override  
  2. protected void onCreate(Bundle savedInstanceState) {  
  3.     super.onCreate(savedInstanceState);  
  4.     setContentView(R.layout.activity_main);  
  5.     myReceiver01 = new MyReceiver01();  
  6.     intentFilter = new IntentFilter();  
  7.     intentFilter.addAction("com.example.cookie.android0713sender.cookie");  
  8.     intentFilter.setPriority(200);  
  9. }