アプリに通知が表示されます。addAction を介して通知にアクションを追加し、通知が消えて 1 時間後に再表示されるようにしたいのですが、このためのアクティビティを開きたくありません。最良のシナリオ: ユーザーがアクションをクリックすると、通知が消えて、通知のスヌーズ タイマーのように、1 時間後に再び表示されます。
アクティビティを開かずにこれを行う方法はありますか?
ご協力いただきありがとうございます
アプリに通知が表示されます。addAction を介して通知にアクションを追加し、通知が消えて 1 時間後に再表示されるようにしたいのですが、このためのアクティビティを開きたくありません。最良のシナリオ: ユーザーがアクションをクリックすると、通知が消えて、通知のスヌーズ タイマーのように、1 時間後に再び表示されます。
アクティビティを開かずにこれを行う方法はありますか?
ご協力いただきありがとうございます
すべての通知アクションはPendingIntentから送信されます。確かにあなたは活動を始めたくなくて、あなたはそうする必要はありません。
ケースに最適なオプションは、PendingIntentを次のように作成することです。
public static PendingIntent getBroadcast (Context context, int requestCode, Intent intent, int flags)
そうすれば、ユーザーが通知をクリックするたびに、システム上にブロードキャストが生成されます。次に、BroadcastReceiverを作成して、このブロードキャストを受信し、AlarmManagerで別のPendingIntentをスケジュールする必要があります。この2番目の保留中のインテントは別のブロードキャストになります。つまり、ブロードキャストが実行されるたびに、BroadcastReceiverは新しい通知を受信して表示できます。
それは意味がありますか?
**編集:
疑似例に明確にするために:
- アプリには、「com.yourapp.mybroadcast」のブロードキャストを受信するためにマニフェストに登録されたBroadcastReceiverがあります
- 通知にはcom.yourapp.mybroadcastPendingIntentがあり、追加のブール値isSchedule=trueおよびinttime= 60(60分)があります
- ユーザーが通知をタップすると、このブロードキャストが開始され、BroadcastReceiverが受信します
onReceive(Context context, Intent intent)
- onReceive内で、isSchedule = trueを読み取ります(つまり、新しいスケジュールと時間= 60分を作成する必要があります。したがって、AlarmManagerを使用して、isSchedule=falseで新しいブロードキャストPendingIntentを作成します。60分で起動されます。
- AlarmManagerは60分後にBroadcastReceiverを再度呼び出しますが、今回はisSchedule = falseであるため、BroadcastReceiverは通知を再度表示する時刻を認識しています。