AlarmManagerをBroadcastReceiverとバンドルして使用できます。
まず、保留中のインテントを作成し、それをAlarmManager.setのどこかに登録する必要があります。次に、ブロードキャスト レシーバーを作成し、そのインテントを受信します。
更新: これが私が約束したコードです。
まず、ブロードキャスト レシーバーを作成する必要があります。
public class NotifyHandlerReceiver extends BroadcastReceiver {
public static final String ACTION = "me.pepyakin.defferednotify.action.NOTIFY";
public void onReceive(Context context, Intent intent) {
if (ACTION.equals(intent.getAction())) {
Notification.Builder builder = new Notification.Builder(context)
.setTicker("Notifica")
.setSmallIcon(android.R.drawable.stat_notify_chat)
.setContentTitle("Notifica")
.setContentText("Hai una notifica!")
.setAutoCancel(true)
.setContentIntent(PendingIntent.getActivity(context, 0,
new Intent(context, MainActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK), 0));
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
nm.notify("interstitial_tag", 1, builder.build());
}
}
}
これは、通知要求を処理できるブロードキャスト レシーバです。それが機能するためには、 に登録する必要がありますAndroidManifest.xml
。そうしないと、Android は通知要求を処理できません。
タグに<receiver/>
宣言を追加するだけです。<application/>
<receiver android:name=".NotifyHandlerReceiver">
<intent-filter>
<action android:name="me.pepyakin.defferednotify.action.NOTIFY" />
</intent-filter>
</receiver>
アクション名は で定義されているものとまったく同じであることに注意してくださいNotifyHandlerReceiver.ACTION
。
次に、このコードを使用できます
public static final int REQUEST_CODE_NOTIFY = 1;
public void scheduleNotification(long delayTimeMs) {
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
long currentTimeMs = SystemClock.elapsedRealtime();
PendingIntent pendingNotifyIntent = PendingIntent.getBroadcast(
this,
REQUEST_CODE_NOTIFY,
new Intent(NotifyHandlerReceiver.ACTION),
PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, currentTimeMs + delayTimeMs, pendingNotifyIntent);
}
delayTimeMs
あなたのアクティビティから、ミリ秒単位で遅延した通知を開始します。