Android - 在IntentService中未接收Location对象 - 使用LocationServices FusedLocationApi requestLocationUpdates使用待处理的Intents

时间:2016-02-18 06:17:57

标签: android android-fusedlocation

我正在尝试获取位置,特别是当app在后台使用
时 “ LocationServices FusedLocationApi requestLocationUpdate - 使用待处理的意图”。

我在这个待定的意图中调用一个IntentService类,它的工作非常好。这是在每个定期间隔之后,我的意图服务被调用,但是这里的问题是我没有在接收到的意图中接收“位置”类对象。

我已经尝试检查intent bundle对象中的每个可用键,也尝试了LocationResult类的hasResult()extractResult()方法,但没有运气。我没有收到我在服务类的“onHandleIntent()”方法中收到的意图中的位置。

如果某人有此工作源代码,请分享。谢谢。

2 个答案:

答案 0 :(得分:0)

这是你从意图服务中的意图中获取位置的方法 -

LocationResult locationResult = LocationResult.extractResult(intent);
if (locationResult != null) {
    Location location = locationResult.getLastLocation();
}

答案 1 :(得分:0)

经过反复试验后我发现,显然当你创建PendingIntent时,你不能在Intent中添加一个包 - 如果你这样做,一旦PendingIntent被传递到你的服务的onHandleIntent,你就不会获得更新的位置: / p>

private synchronized PendingIntent getPendingIntent(@NonNull Context context) {
    if (locationReceivedIntent == null) {
        final Intent intent = new Intent(context, LocationService.class);
        intent.setAction(ACTION_LOCATION_RECEIVED);
        /*
        final Bundle bundle = new Bundle();
        bundle.putInt(BUNDLE_REQUESTED_ACTION, LOCATION_UPDATED);
        intent.putExtras(bundle);
        */
        locationReceivedIntent = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    }
    return locationReceivedIntent;
}

参见我评论过的部分?如果我取消注释该部分,我将不会在onHandleIntent中收到Location对象。如果我发表评论(就像我在这里做的那样),那么它可以正常工作并致电:

        final LocationResult newLocations = LocationResult.extractResult(intent);
        final Location newLocation = newLocations != null ? newLocations.getLastLocation() : null;

在服务的onHandleIntent中获取实际位置(存储在newLocation中)。总结一下:我不知道它为什么会这样,但它确实让我觉得非常奇怪,到目前为止,我没有设法找到任何文件说明,它意味着这样做...