详解Android中BroadCastReceiver组件

2019-12-10 18:57:11王旭

为了演示有序广播的流程,我们修改一下上面三个接收者的代码,如下:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 

public class FirstReceiver extends BroadcastReceiver { 

  private static final String TAG = "OrderedBroadcast"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = intent.getStringExtra("msg"); 
    Log.i(TAG, "FirstReceiver: " + msg); 

    Bundle bundle = new Bundle(); 
    bundle.putString("msg", msg + "@FirstReceiver"); 
    setResultExtras(bundle); 
  } 
} 

public class SecondReceiver extends BroadcastReceiver { 

  private static final String TAG = "OrderedBroadcast"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = getResultExtras(true).getString("msg"); 
    Log.i(TAG, "SecondReceiver: " + msg); 

    Bundle bundle = new Bundle(); 
    bundle.putString("msg", msg + "@SecondReceiver"); 
    setResultExtras(bundle); 
  } 
}
public class ThirdReceiver extends BroadcastReceiver { 

  private static final String TAG = "OrderedBroadcast"; 

  @Override 
  public void onReceive(Context context, Intent intent) { 
    String msg = getResultExtras(true).getString("msg"); 
    Log.i(TAG, "ThirdReceiver: " + msg); 
  } 
} 

我们注意到,在FirstReceiver和SecondReceiver中最后都使用了setResultExtras方法将一个Bundle对象设置为结果集对象,传递到下一个接收者那里,这样以来,优先级低的接收者可以用getResultExtras获取到最新的经过处理的信息集合。