Как лучше всего вызвать веб-сервис в фоновом режиме? - PullRequest
0 голосов
/ 30 октября 2019

У меня есть приложение для Android. Мне нужно каждую минуту вызывать веб-службу в фоновом режиме и, в зависимости от ответа веб-службы, отправлять пользователю уведомление, если для него открыт билет. Каков наилучший способ сделать это? обратите внимание, что целевой SDK составляет 26

Ответы [ 2 ]

1 голос
/ 30 октября 2019

Использование Jobcheduler в Android

Это поможет планировать задания в промежутки времени

https://developer.android.com/reference/android/app/job/JobScheduler

0 голосов
/ 30 октября 2019
The new JobService must be registered in the Android manifest with the BIND_JOB_SERVICE 
permission.

 <service
        android:name=".TestJobService"
        android:label="Word service"
        android:permission="android.permission.BIND_JOB_SERVICE" >

 </service>

Создайте следующий класс утилит.

 public class Util {

// schedule the start of the service every 10 - 30 seconds
public static void scheduleJob(Context context) {
     ComponentName serviceComponent = new ComponentName(context, 
 TestJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(0, serviceComponent);
    builder.setMinimumLatency(1 * 1000); // wait at least
    builder.setOverrideDeadline(3 * 1000); // maximum delay
    //builder.setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED); // require unmetered network
    //builder.setRequiresDeviceIdle(true); // device should be idle
    //builder.setRequiresCharging(false); // we don't care if the device is charging or not
    JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
    jobScheduler.schedule(builder.build());
}

} 

Создайте следующий получатель

public class MyStartServiceReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Util.scheduleJob(context);
}
}

Зарегистрируйте получатель в манифесте Android для события BOOT_COMPLETED.

<receiver android:name="MyStartServiceReceiver" >
<intent-filter>
    <action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>

Создайте свою работу

  /**
  * JobService to be scheduled by the JobScheduler.
  * start another service
  */
public class TestJobService extends JobService {
private static final String TAG = "SyncService";

@Override
public boolean onStartJob(JobParameters params) {
    Intent service = new Intent(getApplicationContext(), LocalWordService.class);
    getApplicationContext().startService(service);
    Util.scheduleJob(getApplicationContext()); // reschedule the job
    return true;
}

@Override
public boolean onStopJob(JobParameters params) {
    return true;
}

}

см. Ссылку

https://www.vogella.com/tutorials/AndroidTaskScheduling/article.html

...