如何将具有最后位置的 LocationResult 发送到 PendingIntent
Posted
技术标签:
【中文标题】如何将具有最后位置的 LocationResult 发送到 PendingIntent【英文标题】:How to send LocationResult with last location to PendingIntent 【发布时间】:2017-10-02 21:25:00 【问题描述】:如何发送PendingIntent
和LocationResult
?
我想使用相同的PendingIntent
来接收位置更改以接收最后一个位置。
查看代码的最后几行:
// Create pending intent for a service which received location changes
Intent locationIntent = new Intent(getApplicationContext(), LocationIntentService.class);
PendingIntent pendingIntent = PendingIntent.getService(
getApplicationContext(),
0,
locationIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
// Start listening to location changes
LocationServices.FusedLocationApi.requestLocationUpdates(googleApiClient, locationRequest, pendingIntent);
// Get last location
Location lastLocation = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
// Send last location
if(lastLocation != null)
// How to send it to the pending intent?
// Result result = LocationResult.create( ... )
// pendingIntent.send(result)
【问题讨论】:
您需要从FusedLocationApi
中找出Intent
中包含的额外内容。然后您可以通过添加相同的附加功能来“模拟”自己。
谢谢。正确,附加键是 FusedLocationProviderApi.KEY_LOCATION_CHANGED 但由于某种原因已被弃用。我看到LocationResult
有hasResult(intent)
和extractResults(intent)
可以从意图中读取,但我看不到相反的方式,如何设置LocationResult
来附加意图。我看到有一个writeToParcel
,但不知道它是如何工作的
您应该添加调试日志并转储您从FusedLocationApi
获得的Intent
,然后我可以帮助您模拟它。
【参考方案1】:
检查LocationResult.extractResult(intent)
的代码可以看出LocationResult
只不过是在Intent
中插入了一个带有特定ID 的Parcelable
。以下 Kotlin 函数在给定的 Intent
中插入 List<Location>
作为 LocationResult
private const val EXTRA_LOCATION_RESULT = "com.google.android.gms.location.EXTRA_LOCATION_RESULT"
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun insertResult(intent: Intent, locations: List<Location>)
val result = LocationResult.create(locations)
intent.putExtra(EXTRA_LOCATION_RESULT, result)
注意:FusedLocationApi
已被弃用,而应使用 FusedLocationProviderClient
。我已经应用上面的解决方案对BroadcastReceiver
从FusedLocationProviderClient
接收更新进行单元测试
【讨论】:
以上是关于如何将具有最后位置的 LocationResult 发送到 PendingIntent的主要内容,如果未能解决你的问题,请参考以下文章
FusedLocationProviderClient 在多次 LocationRequest 后停止给出 locationResult
解组时找不到类:com.google.android.gms.location.LocationResult