嗨,我有这样的功能,当用户点击通知时,我必须检查我的应用程序是否在前台,如果是这样,只需关闭通知。否则需要打开应用程序。
我已经使用有序广播的概念来实现,但我坚持从待定意图调用有序广播接收器。
嗨,我有这样的功能,当用户点击通知时,我必须检查我的应用程序是否在前台,如果是这样,只需关闭通知。否则需要打开应用程序。
我已经使用有序广播的概念来实现,但我坚持从待定意图调用有序广播接收器。
要使用 a 发送有序广播PendingIntent
,请使用其中一种send()
方法,例如this,它需要一个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()
被传递给下一个接收器,最后传递给PendingIntent.OnFinished
回调。