sendStickyBroadcast函数的使用

比如有这种情况,ActivityA发送广播到ActivityB,但BroadcastReceiver是在ActivityB中用代码进行注册的,ActivityA发送出去的广播ActivityB是接收不到的,如果遇到这种情况该怎么办呢?使用sendStickyBroadcast方法就解决了。

新建名称为test的Android项目,Main.java的核心代码如下:

 

 
  
  1. public class Main extends Activity {   
  2. private Button button1;   
  3. private Button button2;   
  4. private int count = 0;   
  5.  
  6. @Override   
  7. public void onCreate(Bundle savedInstanceState) {   
  8. super.onCreate(savedInstanceState);   
  9. setContentView(R.layout.main);   
  10.  
  11. // 添加android.permission.BROADCAST_STICKY权限   
  12. button1 = (Button) this.findViewById(R.id.button1);   
  13. button1.setOnClickListener(new OnClickListener() {   
  14. public void onClick(View arg0) {   
  15. count++;   
  16. Intent intent = new Intent("sendMyBroadcastReceiver");   
  17. intent.putExtra("username""username" + count);   
  18. Main.this.sendStickyBroadcast(intent);   
  19. }   
  20. });   
  21.  
  22. button2 = (Button) this.findViewById(R.id.button2);   
  23. button2.setOnClickListener(new OnClickListener() {   
  24. public void onClick(View arg0) {   
  25. Intent intent = new Intent(Main.this, Second.class);   
  26. Main.this.startActivity(intent);   
  27. }   
  28. });   
  29. }   
  30. }  

文件Second.java的核心代码如下:

 
  
  1. class MyBroadcastReceiver extends BroadcastReceiver {   
  2. @Override   
  3. public void onReceive(Context arg0, Intent arg1) {   
  4. Log.v("!""usernameusername=" + arg1.getStringExtra("username"));   
  5. }   
  6. }   
  7.  
  8. public class Second extends Activity {   
  9. @Override   
  10. public void onCreate(Bundle savedInstanceState) {   
  11. super.onCreate(savedInstanceState);   
  12. setContentView(R.layout.main);   
  13.  
  14. IntentFilter filter = new IntentFilter();   
  15. filter.addAction("sendMyBroadcastReceiver");   
  16. MyBroadcastReceiver myBroadcastReceiverRef = new MyBroadcastReceiver();   
  17. this.registerReceiver(myBroadcastReceiverRef, filter);   
  18. }   
  19. }  

在AndroidManifest.xml文件中添加权限代码:

 
  
  1. <uses-permission android:name="android.permission.BROADCAST_STICKY"></uses-permission>  

程序运行后单击两次"单击我2次发送2次sendStickyBroadcast广播"按钮。

这时再单击"到Second.java"按钮,在LogCat控制台打印出最后一次Intent中的数据。

 

图6.2 单击2次上面的按钮
图6.3 打印最后1次Intent中的数据
因为在Second.java文件中的onCreate()方法中才注册了MyBroadcastReceiver.java广播接收者,此示例在于Main.java先发广播,然后等Second.java启动后再接收。