Как вызвать fusedLocationClient.getLastLocation () из JobService? - PullRequest
0 голосов
/ 09 мая 2019

Я пытаюсь реализовать getLastLocation().addOnSuccessListener, как описано здесь: https://developer.android.com/training/location/retrieve-current#last-known, но в моем случае в рамках JobService, который периодически запускается JobScheduler.

Вот значимая часть моегоjobService:

public class PeriodicJob extends JobService {
    final String TAG = "BNA.Job";
    private FusedLocationProviderClient fusedLocationClient;


    @Override
    public void onCreate() {
        super.onCreate();
        fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
        Log.i(TAG, "onCreate");

    }
    @Override
    public boolean onStartJob(JobParameters params) {
        Log.d(TAG, "Job started..."); // logs every 15mins

        fusedLocationClient.getLastLocation()
                .addOnSuccessListener(this, new OnSuccessListener<Location>() {
                    @Override
                    public void onSuccess(Location location) {
                        // Got last known location. In some rare situations this can be null.
                        if (location != null) {
                            Log.d(TAG, "got Location: " + location);
                            Log.d(TAG, "Accuracy:" + location.getAccuracy()+", LON:"
                                    +location.getLongitude() + ", LAT:" + location.getLatitude());
                        }
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    (...) // never runs
                });
        return true;
    }

Когда я запускаю это (он прекрасно компилируется), я получаю: Caused by: java.lang.ClassCastException: (...)PeriodicJob cannot be cast to java.util.concurrent.Executor

Я смотрел на Сбои приложения Android при проверке подлинности телефона Firebase и Не могу привести это в Executor в Google reCAPTCHA , но я все еще не могу заставить его работать.Простой вызов .addOnSuccessListener(new OnSuccessListener<Location>(), как подсказывает ответ на второй вопрос, не выдает ошибку, но код никогда не выполняется (по крайней мере, журнал не записывается).

Как заставить работать вызов onSuccess?

РЕДАКТИРОВАТЬ: На самом деле это работало все время (без первого параметра), я пренебрег обнаружением случая, когда возвращалось нулевое местоположение (чего я не ожидал).Спасибо Майку М!

...