0

こんにちは、ユーザーが通知を押したときのような機能があります。アプリケーションがフォアグラウンドにあることを確認する必要がある場合は、通知を閉じてください。それ以外の場合は、アプリケーションを開く必要があります。

私は達成するために注文されたブロードキャストの概念を使用していますが、保留中の意図から注文されたブロードキャストレシーバーを呼び出すことに固執しています。

4

1 に答える 1

0

を使用して順序付けられたブロードキャストを送信するには、引数を取るメソッドの 1 つ (たとえば、このPendingIntent) を使用します。この機能は明示的に文書化されておらず、PendingIntent.OnFinishedへのパラメーターの説明のみが、順序付けされたブロードキャストがサポートされていることを示唆しています。send()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 に答える