Android, как получить обновление местоположения в пакете
Я пытаюсь получить обновление местоположения в фоновом режиме с помощью пакетной версии Fused Location Provider Api.
Я делаю это, следуя рекомендациям Google, запрашивая обновления местоположения с обратным вызовом в трансляции PendingIntent.
Для запроса местоположения я использовал setMaxWaitTime, чтобы получить результаты обновления местоположения в пакетном режиме, как указано в документации Google API.
Моя проблема в том, что мой широковещательный приемник не получил местоположение в пакетном режиме и все еще получал одно местоположение за раз из службы определения местоположения.
Я также попробовал новый пример проекта обновления местоположения PendingIntent от Google, но обновление местоположения по-прежнему возвращает только одно местоположение за раз.
Для информации, которую я тестировал на устройстве Nexus 5X, так как оно оснащено оборудованием для дозирования датчиков.
Я что-то пропустил?
Вот пример кода:
Создайте и подключите GoogleApiClient
private static final long UPDATE_INTERVAL = 60000; // Every 60 seconds.
private static final long FASTEST_UPDATE_INTERVAL = 30000; // Every 30 seconds
private static final long MAX_WAIT_TIME = 60000 * 5; // Batch every 5 minutes.
public void buildGoogleApiClient() {
mGoogleApiClient = new GoogleApiClient.Builder(context)
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.addApi(LocationServices.API)
.build();
mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL);
mLocationRequest.setFastestInterval(FASTEST_UPDATE_INTERVAL);
mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
mLocationRequest.setMaxWaitTime(MAX_WAIT_TIME);
mGoogleApiClient.connect();
}
@Override
public void onConnected(Bundle connectionHint) {
try {
// Create a pending intent to listening on location service when the update become available
Intent mIntent = new Intent(context, LocationReceiver.class);
mPendingIntent = PendingIntent.getBroadcast(context, 42, mIntent, PendingIntent.FLAG_CANCEL_CURRENT);
// Permission check before launching location services
if (ContextCompat.checkSelfPermission(context,
Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
return;
}
LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient, mLocationRequest, mPendingIntent);
} catch (Exception e) {
e.printStackTrace();
}
}
Класс BroadcastReceiver
public class LocationReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
try {
// Check if intent has location result
if (LocationResult.hasResult(intent)) {
// Get our location from the LocationResult
LocationResult locationResult = LocationResult.extractResult(intent);
if (locationResult != null) {
List<Location> locations = locationResult.getLocations();
for (Location location : locations) {
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss", Locale.FRANCE);
String dateString = formatter.format(new java.util.Date(location.getTime()));
Log.d(TAG, "LOCATION: lat:" + location.getLatitude() + " long:" + location.getLongitude() +
" radius:" + location.getAccuracy() + " date:" + dateString);
}
} else {
Log.d(TAG, "Location is null");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Спасибо за любую помощь.
1 ответ
После нескольких дней тестирования кажется, что пакетная локация работает с моим кодом.
Я заметил, что мне нужно перейти с моего телефона для дозирования на работу, и это случайно. Некоторое время обновление местоположения будет отложено и доставлено партиями, а иногда оно доставит только одно местоположение.