Я хотел бы реализовать приложение отслеживания, которое запрашивает текущую позицию пользователя каждые 3 минуты.Приложение должно работать в фоновом режиме (также, когда приложение закрыто).В настоящее время я пытаюсь использовать WorkManager для этого.К сожалению, я не получаю позицию GPS (Сообщение о тосте), когда приложение закрыто.
Мой код:
public class LocationWorker extends Worker {
private FusedLocationProviderClient client;
public LocationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
}
@NonNull
@Override
public Result doWork() {
requestLocationUpdates();
return null;
}
private void requestLocationUpdates() {
LocationRequest request = new LocationRequest();
request.setInterval(5 * 1000);
request.setFastestInterval(5 * 1000);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
client = LocationServices.getFusedLocationProviderClient(getApplicationContext());
int permission = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);
if (permission == PackageManager.PERMISSION_GRANTED) {
final LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Toast.makeText(getApplicationContext(),"TEST",Toast.LENGTH_LONG).show();
Location location = locationResult.getLastLocation();
if (location != null) {
Log.e("LONG", "location update " + location.getLongitude());
}
}
};
client.requestLocationUpdates(request, locationCallback,Looper.getMainLooper());
}
}
Любая идея, что я должен делать, чтобы получать обновления местоположения в фоновом режиме, когдаприложение закрыто?И я должен использовать WorkManager или что-то еще лучшее решение?Я также попробовал PeriodicWorkRequest, но у него был минимальный интервал (15 минут).