0

嗨,我有这样的功能,当用户点击通知时,我必须检查我的应用程序是否在前台,如果是这样,只需关闭通知。否则需要打开应用程序。

我已经使用有序广播的概念来实现,但我坚持从待定意图调用有序广播接收器。

4

1 回答 1

0

要使用 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回调。

于 2015-12-21T00:28:51.257 回答