PRIORITY_LOW_POWER vs PRIORITY_HIGH_ACCURACY

时间:2014-12-08 14:10:05

标签: android location google-play-services location-client

我使用 GoogleApiClient 获取位置信息。我的要求是找到准确的位置信息。

在位置请求中,我将优先级设置为PRIORITY_HIGH_ACCURACY,然后当我在门时,我在室内时没有获得任何位置更新。我需要返回位置对象,它可能是最后已知的位置。

我也尝试过PRIORITY_LOW_POWER。但它从未使用GPS获取位置信息。我认为使用它可能有点不准确。

我在外面使用GPS时需要更好的位置信息,还有我在室内时要返回的最后已知位置信息。那么哪个优先级适合我?

并且始终将海拔高度和方位设为0.总是得到融合的提供者。我认为GoogleApiClient不提供提供位置信息的提供商详细信息。

添加了澄清:

我有以下实现:

//Request for location update
LocationServices.FusedLocationApi.requestLocationUpdates(
                            mGoogleApiClient, mLocationrequest,
                            mLocationUpdatePendingIntent);


//Intent service where i receive the location information 
public LocationIntentService() {        
     super("LocationService");  
}
protected void onHandleIntent(Intent locationIntentObj) {
}


//Stop Location Update
LocationServices.FusedLocationApi.removeLocationUpdates(
                    mGoogleApiClient, mLocationUpdatePendingIntent);

在我的情况下,如何从API获取最新的已知位置信息。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

  

[...]当我在门口时,我在室内时没有得到任何位置更新。   [...]并且始终将海拔高度和方位设为0。

您无法访问室内GPS卫星。这些值将由GPS提供。

我建议您使用方法setInterval(...)setFastestInterval(...)。你这样说:

  

我希望任何位置至少interval毫秒,但如果您的位置比我能够更快地处理它{{1}毫秒。

当融合在fastestInterval毫秒内未连接到GPS时,它应该在后台回退到网络提供商(同时应该从Wi-Fi获得准确的位置)。

欢迎您在设置定期收听之前使用interval方法。这将立即返回,但准确性可能会有所不同。

编辑:如果以上不起作用...... 在我的项目中,我一直在后台使用融合提供商,具有均衡的电源优先级。然后我要求额外的标准GPS提供商。

答案 1 :(得分:0)

是的,我可以使用以下代码段获取最后一个已知位置。

/**
 * Remove the user location update
 */
public void removeLocationUpdate() {
    if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
        //Remove the location update
        LocationServices.FusedLocationApi.removeLocationUpdates(
                mGoogleApiClient, mLocationUpdatePendingIntent);
        //A status message updated to the UI
        mAppUtilInstance.broadcastStatusMessage(mContext,
                Constants.STATUS_MSG_116, Constants.STATUS_CODE_116);
    }
    if (Constants.locationInformationEntity == null) {
        //Getting the last known location
        Location mLocationIntentObject = LocationServices.FusedLocationApi
                .getLastLocation(mGoogleApiClient);
        if (mLocationIntentObject != null) {
            //Storing as entity 
            mAppUtilInstance.setLocationInformationEntity(mContext,
                    mLocationIntentObject);
        }
    }
}

当我删除位置更新时,检查api是否在室内时提供位置信息。如果API未能提供,则在删除位置请求时获取最后的已知位置信息。

希望这个能帮助那些在融合地点工作的人。