0

Firebaseジョブ・ディスパッチャは、私は私のカレンダーアプリの古いデバイスと新しいデバイスをサポートするためにfirebase jobdispatcher使用しようとしています

Job myJob = dispatcher.newJobBuilder() 
 
       // the JobService that will be called 
 
       .setService(MyJobService.class) 
 
       // uniquely identifies the job 
 
       .setTag("my-unique-tag") 
 
       // one-off job 
 
       .setRecurring(true) 
 
       // don't persist past a device reboot 
 
       .setLifetime(Lifetime.FOREVER) 
 
       // start between 0 and 60 seconds from now 
 
       .setTrigger(Trigger.executionWindow(0, 60)) 
 
       // don't overwrite an existing job with the same tag 
 
       .setReplaceCurrent(false) 
 
       // retry with exponential backoff 
 
       .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR) 
 
       // constraints that need to be satisfied for the job to run 
 
//    .setConstraints(
 
//      // only run on an unmetered network 
 
//      Constraint.ON_UNMETERED_NETWORK, 
 
//      // only run when the device is charging 
 
//      Constraint.DEVICE_CHARGING 
 
//    ) 
 
       .setExtras(myExtrasBundle) 
 
       .build(); 
 

 
     dispatcher.mustSchedule(myJob);

、私はthis link to setup firebase code in my appを参照していた日付など、毎日/毎週など、指定した時刻にトリガーありません特定の時間に毎日毎週などで仕事をスケジュールするために必要なものがありますか、それに対する他の選択肢がありますか? は、特定の時刻と日付でイベントを再帰的にスケジュールするためのトリガーウィンドウ設定に役立つ必要があります。毎日午後4時のイベント(1週間)

+1

あなたが書いたコードを表示してください! – param

+0

@param一度チェックすると、コードスニペットを追加しました – Swapnil

答えて

0
final int periodicity = (int)TimeUnit.HOURS.toSeconds(12); // Every 12 hours periodicity expressed as seconds 
     final int toleranceInterval = (int) TimeUnit.HOURS.toSeconds(1); // a small(ish) window of time when triggering is OK 



     Job myJob = dispatcher.newJobBuilder() 
         // the JobService that will be called 
         .setService(MyJobService.class) 
         // uniquely identifies the job 
         .setTag("my-unique-tag") 
         // one-off job 
         .setRecurring(true) 
         // don't persist past a device reboot 
         .setLifetime(Lifetime.FOREVER) 
       .setTrigger(Trigger.executionWindow(periodicity, periodicity + toleranceInterval)) 
         // don't overwrite an existing job with the same tag 
         .setReplaceCurrent(false) 
         // retry with exponential backoff 
         .setRetryStrategy(RetryStrategy.DEFAULT_LINEAR) 
         // constraints that need to be satisfied for the job to run 
     //    .setConstraints(
     //      // only run on an unmetered network 
     //      Constraint.ON_UNMETERED_NETWORK, 
     //      // only run when the device is charging 
     //      Constraint.DEVICE_CHARGING 
     //    ) 
         .setExtras(myExtrasBundle) 
         .build(); 

       dispatcher.mustSchedule(myJob); 

    add this line in menifiest file 
    <service 
     android:name="your service name" 
     android:permission="android.permission.BIND_JOB_SERVICE" 
     android:exported="true"/> 

Calculate the time using as per your requirement and set the periodicity and toleranceInterval 

int day = (int)TimeUnit.SECONDS.toDays(seconds);   
long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24); 
long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60); 
long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60); 

1: Day calculation is correct does not require explanation. 
2: TimeUnit.SECONDS.toHours(seconds) will give you direct conversion from seconds to hours without consideration for days you have already calculated. Minus the hours for days you already got i.e, day*24. You now got remaining hours. 
3: Same for minute and second. You need to minus the already got hour and minutes respectively. 
+0

特定の日付に午後4時を指定する方法、またはその実行ウィンドウを計算する必要がありますか? – Swapnil

+0

ジョブのランタイム制約が満たされているかどうか、またシステムの使用状況に依存する特定のポイントで実行されるジョブは保証できません。 – param

+0

アラームマネージャーを使用して、ジョブディスパッチャー を使用して午後4時にジョブをスケジュールできると思います。本当に厳しいスケジュールが必要な場合は、AlarmManager.setAndAllowWhileIdleを使用してください。 – param

関連する問題