Android, как получить обновление местоположения в пакетном режиме

Я пытаюсь получить обновление местоположения в фоновом режиме с помощью пакетной версии API Fused Location Provider.

Я делаю это, следуя рекомендациям Google, запрашивая обновления местоположения с обратным вызовом при трансляции PendingIntent.

Для запроса местоположения я использовал setMaxWaitTime, чтобы получить результаты обновления местоположения в пакетном режиме в соответствии с документацией Google API.

Моя проблема в том, что мой широковещательный приемник не получал информацию о местоположении в пакетном режиме и по-прежнему получает информацию о местоположении по одному от службы определения местоположения.

Я также попробовал новый пример проекта обновления местоположения PendingIntent от Google. но обновление местоположения по-прежнему возвращает только одно местоположение за раз.

Для информации, которую я тестировал на устройстве Nexus 5X, так как оно оснащено аппаратным датчиком пакетной обработки. .

Я что-то упускаю ?

Вот пример кода:

Собрать и подключить клиент Google Api

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)


После тестирования в течение нескольких дней кажется, что пакетная обработка местоположения работает с моим кодом.

Я заметил, что мне нужно двигаться с телефоном, чтобы пакетная обработка работала, и это происходит случайным образом. Некоторое время обновление местоположения будет отложено и будет доставлено в пакетном режиме, а иногда будет доставлено только одно местоположение.

person Pat    schedule 03.04.2017