0

次の方法を使用して、AlramManagerを使用してsetAlarmを実行しています。

    public static void scheduleAlarmReceiverOnce(Context context,String did,long time) {
    AlarmManager alarmMgr = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    PendingIntent pendingIntent =PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReciever.class),PendingIntent.FLAG_CANCEL_CURRENT);
    alarmMgr.set(AlarmManager.RTC_WAKEUP,time, pendingIntent);
}

ここでどのイムを呼んでいますか

        Utils.scheduleAlarmReceiverOnce(this, did,Calendar.getInstance().getTimeInMillis()+30000);

正常に動作しているということは、私の放送でアラームが正確に正確に発生していることを意味します。トーストを表示しているimは正確に30秒で表示されます。私の問題は、再起動するか、無駄な時間を計算して差し引き、アラームを再度スケジュールするときに、残りの時間で再起動または再起動することです。ブートレシーバーで、アラームが再スケジュールされるサービスを再開しています。

            Utils.scheduleAlarmReceiverOnce(this, did,Calendar.getInstance().getTimeInMillis()+leftime);

残り時間のimが正しく取得されている場合..正確に約17000または20000、つまり; 約20秒しかし私のアラームは20秒待たずに即座にトリガーされます。

ヘルプplz..事前に感謝します

4

2 に答える 2

0

Okk私は答えを得ました...ロジックは正しかったですそれはちょうど私の日付の減算が私がCalendar.getInstance()。getCurrentTimeMillisに追加しようとしていたlongの負の値を渡していたということでした...

于 2012-09-05T13:43:22.160 に答える
0

最も簡単な解決策は、アラームで設定したSharedprefernce / Databaseに時間を保存し、デバイスを再起動したときにその時間を再度設定することです。

したがって、再起動前に設定した正確な時刻にアラームが呼び出されます。

現在のコードでこれを試してください。

PendingIntent pendingIntent =PendingIntent.getBroadcast(context, 0, new Intent(context, AlarmReciever.class),0);
于 2012-09-05T11:19:02.960 に答える