Я пытаюсь отправить местоположение телефона каждые 15 минут в Firestore.
Я искал работников в Android, но то, что я прочитал, мой код не работает, так как они синхронны, и я звоню асинхронный метод для вызова firestore.
Также конкурс, который я получаю внутри рабочего, имеет тип MultiDexApplication
и вызовет исключение при вызове mFusedLocationClient.getLastLocation()
Вот код для моего работника .
public class LocationWorker extends Worker {
private final static String TAG = "LocationWorker";
private FusedLocationProviderClient mFusedLocationClient;
private Context mApplicationContext;
private FirebaseFirestore mFireStoreRef;
private String mCurrentUserID;
public LocationWorker(@NonNull Context context, @NonNull WorkerParameters params) {
super(context, params);
mApplicationContext = getApplicationContext();
mFusedLocationClient = LocationServices.getFusedLocationProviderClient(mApplicationContext);
mFireStoreRef = FirebaseFirestore.getInstance();
mCurrentUserID = "Patrick";
}
@NonNull
@Override
public Result doWork() {
mFusedLocationClient.getLastLocation()
.addOnSuccessListener((Activity) mApplicationContext, new OnSuccessListener<Location>() {
@Override
public void onSuccess(final Location location) {
// Got last known location. In some rare situations this can be null.
if (location != null) {
mFireStoreRef
.collection("locations")
.document(mCurrentUserID)
.collection(DateFormat.getDateTimeInstance().format(new Date()))
.add(location)
.addOnSuccessListener(new OnSuccessListener<DocumentReference>() {
@Override
public void onSuccess(DocumentReference documentReference) {
Log.d(TAG, "Location added: " + location.toString());
}
});
}
}
});
return Result.success();
}
}
Я не могу сделать асинхронные вызовы внутри рабочего. Но тогда мне интересно, как я могу узнать местоположение телефона каждые 15 минут для отправки в пожарную?