1

私のアプリケーションは、特定の時間に複数のアラームをスケジュールします。これらのアラームは、アプリケーションの起動時にスケジュールされます。(毎日5つのアラームがあり、1週間に35のアラームが発生します)...

これらのアラームがアプリケーションの起動時にスケジュールされていることをログで確認しました。

問題は、アプリケーションのテストを開始したときに、7つのアラームが完全に正常に鳴ることです。ただし、8番目のアラームは発生しません。デバイスを1日以上静止させて、このシナリオをテストしました。この動作をデバッグするにはどうすればよいですか。また、発火のアラームを妨げる可能性のある理由は何ですか。

編集:

スケジューリングのコード:

try {
    if (info != null) {
        Calendar c = Calendar.getInstance();
        c.set(Calendar.YEAR, year);
        c.set(Calendar.MONTH, month);
        c.set(Calendar.DAY_OF_MONTH, day);
        c.set(Calendar.HOUR_OF_DAY, info.getHour());
        c.set(Calendar.MINUTE, info.getMinute());
        c.set(Calendar.SECOND, 0);

        Intent intent = new Intent(context, AlarmReceiverActivity.class);
        intent.putExtra("name", info.getPrayerName());
        intent.putExtra("sound", soundType);

        intent.putExtra("time", formatTimeClock(context, info.getHour(), info.getMinute()));

        PendingIntent pendingIntent = PendingIntent.getActivity(context, alarmId, intent, PendingIntent.FLAG_CANCEL_CURRENT);

        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), pendingIntent);
    }
} catch (Exception e) {
    Log.e("ALarmSchedularManager", e.getMessage());
}
4

2 に答える 2

2

この動作をデバッグするにはどうすればよいですか

adb shell dumpsys alarmスケジュールされたアラームが何であるか、およびそれらが次に呼び出されるタイミングを確認するために使用します。

発火のアラームを防ぐ考えられる理由は何ですか

上記のコードスニペットの外部で処理される可能性はありますが、コードはすでに時間が経過している可能性を考慮して表示されていません。

于 2013-02-19T12:28:45.073 に答える
1

うまくいけば、以下のコードが役立つでしょう、私は私のアプリで同じものを使用しました。ここで、AlarmManagerクラスで繰り返される引数は、24 * 60 * 60*1000である必要があります。

AlarmManager am = (AlarmManager) ct.getSystemService(Context.ALARM_SERVICE);         
Intent intent1 = new Intent(ct, TimeAlarm.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(ct, 0,intent1, PendingIntent.FLAG_CANCEL_CURRENT);

Date curr=new Date();
curr.setHours(h);
curr.setMinutes(m);
c.setTime(curr);
c.set(Calendar.SECOND, 0);

Calendar c1 = Calendar.getInstance();
am.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(),24*60*60*1000, pendingIntent);

ハードコード操作(24 * 60 * 60 * 1000)の代わりに、AlarmManager.INTERVAL_DAYを使用できます。1日までのさまざまな間隔についてこれを確認してくださいhttp://developer.android.com/reference/android/app/AlarmManager.html#INTERVAL_DAY

于 2013-02-19T10:38:04.673 に答える