2012-09-19 1 views
8

ここで私は私のウィジェットのアラームを設定するために使用されるコードであるAlarmManager.RTCタイプがまだスリープモードで起動され使用してスケジュール:PendingIntentは

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()はインテントによって引き続きトリガーされます。

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

+0

あなたのご質問はありますか? – HitOdessit

+1

'AlarmManager.RTC'は、デバイスをスリープモードで呼び出さないでください!呼び出すことを避けるために私は何をすべきですか? – SAbbasizadeh

+0

あなたのコードをテストするAndroid OSのバージョンとデバイス/エミュレータは何ですか? – HitOdessit

答えて

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()に変更してみてください。

関連する問題