2016-08-15 8 views
0

AlarmRecieverを初めて使用します。これは、サービスの一部です:AlarmManagerは異なるAPIの異なる時刻に起動します

//Service 
    this.context=this; 
    Intent alarm = new Intent(this.context,AlarmReceiver.class); 
    boolean alarmRunning =(PendingIntent.getBroadcast(this.context,0, alarm,PendingIntent.FLAG_NO_CREATE) != null); 
    if(alarmRunning == false){ 
     PendingIntent pendingIntent = PendingIntent.getBroadcast(this.context,0,alarm,0); 
     AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),15000,pendingIntent); 
    } 

私はalarmManager.setRepeatingで15000が15秒を意味していると考え。私のS4 miniでAPI 19を使用するのは正しいことです。しかし、私のS7 API 23では毎分アラームが発せられます。誰もがこの問題を知っていますか?

08-15 10:54:15.949 11495-11522/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 10:55:15.619 11495-12452/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 10:56:15.619 11495-13407/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 10:57:15.629 11495-14288/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 10:58:15.629 11495-15193/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:00:00.039 11495-16907/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:00:15.599 11495-17149/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:01:15.619 11495-18085/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:02:15.659 11495-19040/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:03:58.049 11495-19601/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:06:11.419 11495-19878/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:11:11.349 11495-24547/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 
08-15 11:16:11.449 11495-29123/com.example.entwicklung1.designtestapp D/BackgroundRunning:: 

私は見ての通り、それは今数分ごとに発射:

は、ここに私のログです。新しいドキュメントから

答えて

0

アラームマネージャはバッテリを放電するデバイスをウェイクアップするため、保留中のインテントを放つ新しい方法がいくつかあります。 APIが19以上のデバイスでは、保留中のインテントを開始するのに2つ以上のアラームが似ている場合は、一緒に起動されるため、アラームごとに毎回デバイスを復帰させる必要はありません。だから、あなたがしなければならない新しい変更は、このコードを配置するために、次のとおりです。このコード行の後

AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 

、この場所:AndroidのAPIは、キットカット、setExactよりも大きい場合は、ここで

if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) { 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),15000,pendingIntent); 

} else { 
     alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(),15000,pendingIntent); 
} 

をメソッドが使用され、そうでない場合、アラームは正常に設定されたように設定されます。これがうまくいってほしい、すべてのベスト。

+0

ありがとうございます。だから私は上記のあなたのコードをalarmManager.setRepeating ...の代わりに使用する必要がありますか? – Koss

+0

よろしいですか、ちょうどこの正確なコードをコピーしてください。私はそれを修正しますので、コピーしてコードに変更する必要はありません。 –

+0

私の喜び、答えを受け入れ、それがうまくいくなら投票してください。 :)) –

0

注:API 19のように、全繰り返しアラームが不正確です。アプリケーションで正確な配信時間が必要な場合は、前述のように毎回リスケジュールする1回限りの正確なアラームを使用する必要があります。 targetSdkVersionがAPI 19より前のレガシーアプリケーションは、繰り返しアラームを含むすべてのアラームを引き続き保持します。

どのように同じ動作を得ることができますか? setExactを使用してPendingIntentを使用してAlarmManagerを再設定することができます。

関連する問題