11

アプリケーションと対話(使用)している場合は正常に機能するアラームがありますが、翌日に設定してアプリと対話しない場合は機能しません。したがって、アプリケーションプロセスが実行されていないため、これが疑われますその時。

これが私がやっていることです

Calendar calSet = Calendar.getInstance();
calSet.set(Calendar.HOUR_OF_DAY, selectedhour);
calSet.set(Calendar.MINUTE, selectedminute);
calSet.set(Calendar.YEAR, year);
calSet.set(Calendar.MONTH, monthOfYear);
calSet.set(Calendar.DATE, dayOfMonth);
alarm = new Intent(ActivityA.this, Service.class);
pendingIntent = PendingIntent.getService(getApplicationContext(), i++,alarm, 1);
alarmanager.set(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),pendingIntent);
4

4 に答える 4

15

AlarmManagerから

AlarmManager は、システム アラーム サービスへのアクセスを提供します。これらにより、将来のある時点でアプリケーションを実行するようにスケジュールできます。アラームが鳴ると、登録されていた Intentがシステムによってブロードキャストされ、ターゲット アプリケーションがまだ実行されていない場合は自動的に開始されます。登録されたアラームは、デバイスがスリープ状態の間保持されます (また、その間にアラームがオフになった場合はオプションでデバイスを起動できます) が、オフにして再起動するとクリアされます。


簡単な方法で、デバイスが再起動されるまで機能します。

@CommonsWareは、デバイスの再起動後もアラームを保持するサンプル アプリケーションのリンクが与えられています。


以下のセクションは無視してください。有効ではないようです。今後削除します

アプリケーション キルの詳細については、永続的な AlarmManager を作成する方法と、アプリのキル後にアラームを保存する方法を参照してください。このような問題を処理する方法についてのアイデアを提供できます (アプリケーションが強制終了された場合にアラームを保持するため)

于 2013-11-07T04:50:41.513 に答える
3

はい、機能しましたが、適切な理解についてはドキュメントを参照してください。

注: Alarm Manager は、アプリケーションが現在実行されていない場合でも、特定の時間にアプリケーション コードを実行する場合を対象としています。通常のタイミング操作 (ティック、タイムアウトなど) では、Handler を使用する方が簡単で効率的です。

ここを参照してくださいhttp://developer.android.com/reference/android/app/AlarmManager.html

于 2013-11-07T04:51:45.097 に答える
3

AlarmManagerのドキュメントを見る..

http://developer.android.com/reference/android/app/AlarmManager.html

アプリを強制終了すると、そのアプリによってスケジュールされたすべてのアラームが削除されると記載されている場所はどこにもありません。より具体的には、アプリが開始されていない場合は、アプリが開始することを示しています。

私は自分でテストを行い、これを検証することができます..

  • 5 秒後にアラームを設定します。
  • 次に、最近のアプリを閉じます。
  • 次に、ブロードキャストが受信されるようにログを監視します。
  • これは署名済み apk を使用して行われたことに注意してください。

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MILLISECOND, 5000);
    
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pendingIntent);
    

また、ブート時のアラームの再起動について Pankaj Kumar が言ったことも心に留めておきます。AlarmManager はデバイスの再起動時にすべてのアラームをクリアするため、ここは自分でカバーする必要がある 1 つの場所です。

于 2017-03-15T00:28:41.507 に答える