データベースに時間が保存されている場合、12時間ごとに通知を表示するAndroidアプリを開発しています。そのため、データベースにデータを入力または編集するたびに、現在のアラームマネージャーをキャンセルし、新しいアラームマネージャーを開始して、見逃さないようにします。また、再起動時に、alarmmanagerを呼び出しました。ブロードキャストレシーバーでは、データベースのエントリがチェックされ、見つかった場合は通知が設定され、アプリが自動的に開かれます。
そのため、日付を手動で変更してアプリをテストすると、アプリは期待どおりに機能します。再起動してもアプリは機能します。ただし、アプリを14時間近くアイドル状態にしておくと、通知は設定されませんが、アプリを開いてその後、通知が設定されるように一時停止します。
これが私がalarmmanagerと呼ぶ方法です。インテントalarmintent=new Intent(context、package.Alarm_Manager.class);
alarmintent.putExtra("note","Notify");
sender = PendingIntent.getBroadcast(context , 0 , alarmintent , PendingIntent.FLAG_CANCEL_CURRENT | Intent.FILL_IN_DATA);
alarm_manger = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarm_manger.cancel(sender);
Calendar cal = Calendar.getInstance();
long now = cal.getTimeInMillis();
alarmintent = new Intent(context, package.Alarm_Manager.class);
alarmintent.putExtra("note","Notification");
sender = PendingIntent.getBroadcast(context , 0 , alarmintent , PendingIntent.FLAG_CANCEL_CURRENT | Intent.FILL_IN_DATA);
alarm_manger = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarm_manger.setRepeating(AlarmManager.RTC_WAKEUP, now, AlarmManager.INTERVAL_HALF_DAY, sender);
これは放送受信機です
@Override
public void onReceive(Context context, Intent intent)
{
NotificationManager manger = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
Calendar cal = Calendar.getInstance();
date = (int)(cal.getTimeInMillis()/1000);
Notification notification = new Notification(R.drawable.vlcsnap_396460 , "Notify" , System.currentTimeMillis());
PendingIntent contentIntent = PendingIntent.getActivity(context, 0, intent, 0);
notification.setLatestEventInfo(context, "App", "Notify" , contentIntent);
notification.flags = Notification.FLAG_INSISTENT;
manger.notify( 0 , notification);
}