8

ウィジェットのアラームを設定するために使用したコードは次のとおりです。

 private static void setAlarm(Context context) {
    Intent myIntent = new Intent(context, Widget.class);
    myIntent.setAction(AUTO_UPDATE);
    PendingIntent pendingIntent =
            PendingIntent.getBroadcast(context, 0, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Service.ALARM_SERVICE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(System.currentTimeMillis());
    calendar.add(Calendar.SECOND, 8);
    alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
            pendingIntent);
}  

しかし問題は、スリープモードでonReceive()もインテントによってトリガーされることです。

setInexactRepeatingの代わりに使用した後setRepeatingは、スリープ モードで通話間の遅延が最大 1 分増加しますが、それでもバッテリーを消費します。

4

1 に答える 1

1

現在の時刻より8秒早く設定したカレンダーの時刻の8秒後にアラームをトリガーするように設定していると思います。したがって、アラームを即座にトリガーするように設定しています。

ここにカレンダーが必要な理由はわかりません。カレンダーは、ここで8秒先の時間を追跡するために使用されます。

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 8);

ここでは、8秒ごとにトリガーするようにアラームが作成されます。

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
        pendingIntent);

アラームは8秒ごとにトリガーされ続けます。

私は変更してみます:

alarmManager.setInexactRepeating(AlarmManager.RTC, calendar.getTimeInMillis(), 8000,
        pendingIntent);

に:

alarmManager.setInexactRepeating(AlarmManager.RTC, System.currentTimeMillis(), 8000,
        pendingIntent);

引き続き問題が発生する場合は、間隔が問題である可能性があります。に変更setRepeating()set()て、それが当てはまるかどうかを確認してください。

于 2013-02-16T23:14:37.720 に答える