2017-04-05 6 views
-1

私は1日の特定の時間にトリガするアラーム通知を繰り返す必要があります。私が作った反復アラームは、アラームをうまく発していますが、時にはその設定時間に消えることもあります。たとえば、私は午前6時にアラームを設定しましたが、翌日の翌6時15分にトリガした後、アラームを設定する方法がより正確かどうか疑問に思っていましたか?ここ繰り返しアラームをより正確にするには?

私の繰り返しアラームAndroid Developersから

 Calendar calendar_dog= Calendar.getInstance(); 
         calendar_dog.set(Calendar.HOUR_OF_DAY,7); 
         calendar_dog.set(Calendar.MINUTE,0); 
         calendar_dog.set(Calendar.SECOND,0); 
         Intent intent= new Intent(getApplicationContext(), notify_dog.class); 
         PendingIntent dog_intent=PendingIntent.getBroadcast(getApplicationContext(),100,intent,PendingIntent.FLAG_UPDATE_CURRENT); 
         AlarmManager dog_alarm =(AlarmManager)getApplicationContext().getSystemService(ALARM_SERVICE); 
         dog_alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP,calendar_dog.getTimeInMillis(),AlarmManager.INTERVAL_DAY,dog_intent); 

と私のレシーバに

NotificationManager notify_dog=(NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Intent dog_intent= new Intent(context, HomeActivity.class); 
    dog_intent.setFlags(dog_intent.FLAG_ACTIVITY_CLEAR_TOP); 

    PendingIntent dog_pending=PendingIntent.getActivity(context,100,dog_intent,PendingIntent.FLAG_UPDATE_CURRENT); 
    Uri alarmSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
    NotificationCompat.Builder dog_build= new NotificationCompat.Builder(context).setContentIntent(dog_pending). 
      setSmallIcon(R.drawable.pet) 
      .setContentTitle("Pet Guide 101") 
      .setContentText("have you feed your Dog?") 
      .setSound(alarmSound) 
      .setAutoCancel(true); 
    notify_dog.notify(100,dog_build.build()); 

答えて

1

ための私のコードです:前述したように、アラームの種類を選ぶことがしばしばあり、

アラームを作成する最初のステップ。さらに別の違いは、アラームが必要な正確さです。ほとんどのアプリケーションでは、setInexactRepeating()が適切です。この方法を使用すると、Androidは複数の不正確な繰り返しアラームを同期させ、同時にそれらを起動させます。これにより、バッテリの放電が減少します。

堅牢な時間要件があるまれなアプリケーション(たとえば、午前8時30分にアラームを正確に発火させ、その後1時間ごとにsetRepeating()を使用する必要がある場合)。しかし、可能であれば正確なアラームを使用しないでください。

setInexactRepeating()では、setRepeating()でできるようにカスタムインターバルを指定することはできません。 INTERVAL_FIFTEEN_MINUTES、INTERVAL_DAYなどの間隔定数の1つを使用する必要があります。完全なリストについては、AlarmManagerを参照してください。

だから、

、あなたが望むものを達成するために、あなたがそのようにそれを使用する必要があります。

dog_alarm.setRepeating(AlarmManager.RTC_WAKEUP,calendar_dog.getTimeInMillis(),AlarmManager.INTERVAL_DAY,dog_intent); 
+0

OKオハイオ州の病気、それが動作しなかったことがtyreklGana-AN @ –

+0

..あなたに感謝してみてください?はいの場合は、私の解決策が承認されていることを確認してください。 –

関連する問題