Android FusedLocationProviderApi: la intención entrante no tiene LocationResult o LocationAvailability

Estoy tratando de suscribirme a las actualizaciones de ubicación a través de FusedLocationProviderApi de Google. Quiero recibir actualizaciones en segundo plano, para recibir actualizaciones incluso si la aplicación se cierra. Siguiendo la documentación en línea lo mejor que pude, escribí el siguiente código. Nota: esto se está haciendo en un servicio de intención, no en el hilo de la interfaz de usuario, por eso estoy usando métodos de conexión / resultado de bloqueo.

private void startLocationServices(String deviceId, int pollingInterval) {
    Log.i(TAG, "Starting location services with interval: " + pollingInterval + "ms");
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    final PowerManager.WakeLock wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
    wakeLock.acquire();

    final GoogleApiClient googleApiClient =
            new GoogleApiClient.Builder(this)
                    .addApi(LocationServices.API)
                    .build();

    ConnectionResult result = googleApiClient.blockingConnect();

    if (!result.isSuccess() || !googleApiClient.isConnected()) {
        Log.e(TAG, "Failed to connect to Google Api");
        wakeLock.release();
        return;
    }

    LocationRequest locationRequest = new LocationRequest();
    locationRequest.setInterval(pollingInterval);
    locationRequest.setFastestInterval(10000);
    locationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

    Intent locationIntent = new Intent(this, GeoBroadcastReceiver.class);
    locationIntent.putExtra(EXTRA_LOCATION_UPDATE_DEVICE_ID, deviceId);
    locationIntent.setAction(GeoBroadcastReceiver.ACTION_LOCATION_UPDATE);
    PendingIntent locationPendingIntent = PendingIntent.getBroadcast(
            this, 0, locationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

    PendingResult pendingResult = LocationServices.FusedLocationApi
            .requestLocationUpdates(googleApiClient, locationRequest, locationPendingIntent);

    Result requestResult = pendingResult.await();
    Status requestStatus = requestResult.getStatus();

    if (requestStatus.isSuccess()) {
        Log.i(TAG, "Successfully subscribed to location updates.");
    } else {
        Log.e(TAG, String.format(
                        "Failed subscribe to location updates. Error code: %d, Message: %s.",
                        requestStatus.getStatusCode(),
                        requestStatus.getStatusMessage()));
    }

    googleApiClient.disconnect();
    wakeLock.release();
}

Cuando ejecuto esto, veo querequestStatus.isSuccess() devuelve verdadero, lo que indica que me he suscrito correctamente a las actualizaciones de ubicación. Además, elGeoBroadcastReciever, que se extiendeWakefulBroadcastReceiver, recibe una intención en el intervalo de sondeo correcto, con la acción correcta. Bueno hasta ahora, parece. Esto es lo que estoy haciendo en elonReceive método para elGeoBroadcastReceiver:

    if (LocationResult.hasResult(intent)) {
        LocationResult locationResult = LocationResult.extractResult(intent);
        Location location = locationResult.getLastLocation();
        if (location != null) {
            GeoMonitoringService.wakefulLocationUpdate(context, location);
        } else {
            Log.e(TAG, "LocationResult does not contain a LastLocation.");
        }
    } else {
        Log.e(TAG, "Intent does not contain a LocationResult.");
    }

El problema es que, cada vez que entra la intención, no contiene elLocationResult, ni contiene elLocationAvailabilityResult. Inspeccioné el intento entrante en el depurador, y el único elemento en los extras del intento es el extra que agregué al configurar el intento (la identificación del dispositivo). Como tal,LocationResult.hasResult() devuelve falso Cada vez.

He intentado esto en un Galaxy Note 4 con 4.0.1 y un Nexus 4 con 5.1.1, con el mismo resultado.

Si desactivo la ubicación en el teléfono, dejo de recibir intenciones por completo, como se esperaba.

Respuestas a la pregunta(3)

Su respuesta a la pregunta