位置客户端在 PendingIntent 中使用可打包的附加请求请求位置更新

Posted

技术标签:

【中文标题】位置客户端在 PendingIntent 中使用可打包的附加请求请求位置更新【英文标题】:Location Client request location updates with parcelable extras in PendingIntent 【发布时间】:2015-02-02 20:46:39 【问题描述】:

我正在使用带有 PendingIntent 的 LocationClient 来获取位置更新。

PendingIntent.getService(context, 0, new Intent(context, OnLocationAvail.class), PendingIntent.FLAG_UPDATE_CURRENT)

上面的代码工作正常,我从键 LocationClient.KEY_LOCATION_CHANGED 获取位置

但是,当我有如下所述的额外可打包数据时,服务会使用可打包数据调用,但意图额外数据中的关键 LocationClient.KEY_LOCATION_CHANGED 始终为空。

Intent callbackIntent = new Intent(context, OnLocationAvail.class);
callbackIntent.putExtra(SOME_KEY, PARCELABLE_DATA);
PendingIntent.getService(context, 0, callbackIntent, PendingIntent.FLAG_UPDATE_CURRENT);

【问题讨论】:

在哪里可以找到解决方案? 【参考方案1】:

问题是当 LocationClient 通过回调 PendingIntent 推送更新时,该进程没有 ClassLoader 的任何信息,因为它发生在应用程序上下文之外并且在不同的进程中。

以下链接帮助我缩小了问题范围。 https://code.google.com/p/android/issues/detail?id=6822

解决方案:

在请求位置更新时使用破解包。

Bundle bundle = new Bundle();
bundle.putParcelable("com.foo.parcel", some_parcel);
callbackPendingIntent.putExtra("com.foo.bundle",bundle);

收到位置更新时。

Bundle oldBundle = intent.getBundleExtra("com.foo.bundle");      
some_parcel = oldBundle.getParcelable("com.foo.parcel");

【讨论】:

以上是关于位置客户端在 PendingIntent 中使用可打包的附加请求请求位置更新的主要内容,如果未能解决你的问题,请参考以下文章

Android 位置:PendingIntent 与 LocationListener

如何将具有最后位置的 LocationResult 发送到 PendingIntent

当应用程序处于后台时,带有 PendingIntent 的 Android FusedLocationClient 未收到位置更新

Pendingintent getbroadcast 丢失可打包数据

Pendingintent getbroadcast 丢失可打包数据

带有 PendingIntent 的 LocationManager.requestLocationUpdates 在 API 26 上不起作用