2016-10-26 9 views
0

20秒ごとにトリガする通知をセットアップしたいと思います。私IntentServiceクラスで私のFragementが作成されたときに毎回AlarmManagerが実行されないように/開始する必要がありますか?

 Intent alarmIntent = new Intent(getActivity(), IntentService.AlarmReceiver.class); 
     pendingIntent = PendingIntent.getBroadcast(getContext(), 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT); 

     alarmManager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
     alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), 20000, pendingIntent); 

私は次の静的クラスがあります:私は私の断片の私のonCreate()メソッドでAlarmReceiverを設定

public static class AlarmReceiver extends BroadcastReceiver { 

     @Override 
     public void onReceive(Context context, Intent intent) { 

      Intent send = new Intent(context, IntentService.class); 
      context.startService(send); 
     } 
    } 

私はそのIntentServiceクラスで私の通知を作成したいですそれは私が上記で始めるものです。

AlarmManagerは動作し、20秒ごとに実行されますが、私のFragmentが作成されるたびに起動されます。

私の悩みは、どこで私のAlarmManagerがいつフラッグメントが作成されたときに実行されないようにするべきですか?

+0

alaramを開始する前にこれを使用してください:if(pendingIntent = null){ START ALARAM MANAGER } –

答えて

2

あなたは20秒ごとに、その後、今から20秒でアラームをオフに設定してから20秒ごとに、しかしとするアラームマネージャを語っていません。だからAndroidはすぐにアラームを発します。これは過去のアラームを捕まえ、コードが終了してから数ミリ秒も経ちます。最初にスケジュールされたアラームが将来発生することを確認する必要があります。

だから、あなたが本当に必要なものは以下です:

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() + 20000, 20000, pendingIntent); 

これは、20秒ごとに繰り返し、20秒で次のアラームをスケジュールするためにアラームマネージャに指示します。

+1

それが私の問題を解決しました。ありがとう。 – GaborH

+0

私が助けることができてうれしい - 最近、同じ問題があっただけです:-) –

関連する問題