要使用PendingIntent 发送有序广播,请使用send() 方法之一,例如this one,它采用PendingIntent.OnFinished 参数。此功能没有明确记录,只有PendingIntent.OnFinished 的参数描述给出了一些支持有序广播的提示。
这是发送有序广播的示例:
Intent i = new Intent("com.my.package.TEST_ACTION");
PendingIntent.OnFinished listener = new PendingIntent.OnFinished() {
@Override
public void onSendFinished(PendingIntent pendingIntent, Intent intent,
int resultCode, String resultData, Bundle resultExtras) {
Log.i("TEST", String.format("onSendFinished(): result=%d action=%s",
resultCode, intent.getAction()));
}
};
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
int initResult = -1;
try {
pi.send(initResult, listener, null);
} catch (PendingIntent.CanceledException e) {
e.printStackTrace();
}
我确认这会产生一个有序广播,方法是定义一些具有这种通用形式的接收器,并在清单中以不同的优先级注册:
public class ReceiverA extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.i("AAAA", String.format("result=%d ordered=%b", getResultCode(), isOrderedBroadcast()));
setResultCode(1111);
}
}
logcat 输出确认接收器按预期顺序调用,isOrderedBroadcast() 对每个都为真,setResultCode() 设置的结果代码被传递给下一个接收器,最后传递给@987654331 @回调。