отправка дополнительно в requestLocationUpdates intentService прерывает обновления местоположения

У меня проблемы с отправкой строки с моимPendingIntent что я передаюLocationServices.FusedLocationApi.requestLocationUpdates(GoogleApiClient client, LocationRequest request, PendingIntent callbackIntent).

Похоже, что имя пользователя, которое я добавляю наIntent искажает местоположение, котороеrequestLocationUpdates пытается передать мойIntentService какintent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED) возвращаетсяnull.

РЕДАКТИРОВАТЬ

Я пытался сделатьUser класс, который реализуетParcelable и положить его в качестве дополнительного:

mRequestLocationUpdatesIntent.putExtra("username", new User(username));

и я также пытался поставитьParcelable User внутриBundle как предложено через комментарий в этом сообщении об ошибкеhttps://code.google.com/p/android/issues/detail?id=81812:

Bundle userBundle = new Bundle();
userBundle.putParcelable("user", new User(username));
mRequestLocationUpdatesIntent.putExtra("user", userBundle);

в моем сервисе:

Bundle userBundle = intent.getBundleExtra("user");
User user = userBundle.getParcelable("user");
String username = user.getUsername();

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

Я настраиваю этоIntentService для обработки обновлений местоположения:

public class LocationUpdateService extends IntentService {

    private final String TAG = "LocationUpdateService";

    public LocationUpdateService() {
        super("LocationUpdateService");
    }


    @Override
    protected void onHandleIntent(Intent intent) {

        Log.d(TAG, "onHandleIntent");

        Bundle extras = intent.getExtras();
        Log.d(TAG, "keys found inside intent: " + TextUtils.join(", ", extras.keySet()));

        String username = intent.getStringExtra("username");

        if (username != null) {
            Log.d(TAG, "username: " + username);
        } else {
            Log.d(TAG, "username: null");
        }

        if (!intent.hasExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED)) {
            Log.d(TAG, "intent does not have location :(");
        }

        Location location = intent.getParcelableExtra(FusedLocationProviderApi.KEY_LOCATION_CHANGED);

        if (location == null) {
            Log.d(TAG, "location == null :(");
        }

        Log.d(TAG, "latitude " + String.valueOf(location.getLatitude()));
        Log.d(TAG, "longitude " + String.valueOf(location.getLongitude()));

        ...

    }


}

Когда пользователь нажимает кнопку,startLocationUpdates называется в моей основной деятельности:

основной вид деятельности:

...

Boolean mLocationUpdatesEnabled = false;

protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(LOCATION_UPDATE_INTERVAL);
    mLocationRequest.setFastestInterval(LOCATION_UPDATE_FASTEST_INTERVAL);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
}

protected void startLocationUpdates() {

    Log.d(TAG, "startng location updates...");

    mLocationUpdatesEnabled = true;

    if (mLocationRequest == null) {
        createLocationRequest();
    }

    // create the Intent to use WebViewActivity to handle results
    Intent mRequestLocationUpdatesIntent = new Intent(this, LocationUpdateService.class);

    // create a PendingIntent
    mRequestLocationUpdatesPendingIntent = PendingIntent.getService(getApplicationContext(), 0,
            mRequestLocationUpdatesIntent,
            PendingIntent.FLAG_CANCEL_CURRENT);

    // request location updates
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,
            mLocationRequest,
            mRequestLocationUpdatesPendingIntent);

    Log.d(TAG, "location updates started");
}

protected void stopLocationUpdates() {

    Log.d(TAG, "stopping location updates...");

    mLocationUpdatesEnabled = false;

    LocationServices.FusedLocationApi.removeLocationUpdates(
            mGoogleApiClient,
            mRequestLocationUpdatesPendingIntent);

    Log.d(TAG, "location updates stopped");
}

Это все работает хорошо и хорошо; Когда пользователь нажимает кнопку,toggleLocationUpdates называется, который вызываетLocationServices.FusedLocationApi.requestLocationUpdates который называет мойLocationUpdateService где я могу получить местоположение.

Беда возникает, когда я пытался надеть лишнюю строку наIntent используя Intent.putExtra (String, String):

основной вид деятельности:

...
protected void startLocationUpdates(String username) {
    ....

    // create the Intent to use WebViewActivity to handle results
    Intent mRequestLocationUpdatesIntent = new Intent(this, LocationUpdateService.class);

    //////////////////////////////////////////////////////////////////
    //
    //  When I put this extra, IntentService sees my username extra
    //  but the parcelableExtra `location` == null :(
    // 
    //////////////////////////////////////////////////////////////////

    mRequestLocationUpdatesIntent.putExtra("username", username);
    ...
}
...

РЕДАКТИРОВАТЬ Следующее предложение я начал как утверждение, а не как вопрос: «Я использую ...»

Использую ли я правильный подход для отправки некоторых дополнительных данных в эту обработку обновлений местоположенияIntentService или есть более разумный способ пойти по этому поводу?

Это ошибка или просто плохая документация?

Ответы на вопрос(1)

Ваш ответ на вопрос