0

イベントが発生した場合にAlarmManagerを使用して通知をスケジュールするアプリケーションがあります。これはうまく機能します。

問題は、ユーザーがアプリケーションをインスタンス化するたびに、イベント日である場合はStatusBar通知が表示されることです。アプリがアクティブでない(つまり閉じている)場合にのみ、ステータスバー通知を表示したいと思います。

@Override
public void onCreate(Bundle savedInstanceState)
{
        super.onCreate(savedInstanceState);
        setContentView(R.layout.simple_calendar_view);

        if (notification_value == true) {
            int dayOfEvent = day;
            if (notification_day == 1) {
                dayOfEvent = day + 1;

            }
            if(isHoliday(dayOfEvent, month, year))
            {
                String mn = monthName[month-1];
                String date_string = setParameter(year, mn, dayOfEvent);
                startAlarm(year, (month-1), day, hour, mins, date_string);
            }
        }
} 
4

1 に答える 1

0

アプリの実行中にAlarmManagerが通知を作成しないようにするには、onResume()でAlarmManager.cancel (PendingIntent intent)を使用し、onPause()でアラームを再作成します。

AlarmManager.cancel()のAndroidドキュメントから:

インテントが一致するアラームをすべて削除します。インテントがこれと一致する(filterEquals(Intent)で定義されている)任意のタイプのアラームはキャンセルされます。

これは、古いアラームへの参照を保持する必要がないことを示しています。一致するインテントを持つアラームはキャンセルされます。

最後に、コードをonCreate()とonDestoryに移動することはお勧めしません。これは、アプリがユーザーによって一時停止され(たとえば、ホームボタンを使用して)、後でOSによって強制終了される可能性があるためです。この場合、onDestroy()メソッドが呼び出されることはありません。アプリがバックグラウンドで実行されているときに通知が表示されない場合は、アプリが実際に強制終了された時期を追跡する方法について、次の詳細な回答をお読みください。Androidアプリケーションがバックグラウンドで実行されているかどうかを確認する

于 2012-08-13T04:40:17.187 に答える