Я пытаюсь реализовать 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?
РЕДАКТИРОВАТЬ: На самом деле это работало все время (без первого параметра), я пренебрег обнаружением случая, когда возвращалось нулевое местоположение (чего я не ожидал).Спасибо Майку М!