安卓中的融合定位提供程序

9
我正在使用Fused Location Provider开发一个应用程序。我有一个疑问:为了在规律的时间间隔内获取位置,它使用requestLocationUpdates()。但是,它从哪个来源获取位置信息,是通过WIFI、GPS还是网络?在我的应用程序中,只有当WiFi打开时才能按规律获取位置。当WiFi处于关闭状态时,它无法获取位置(它应该从其他来源(GPS或网络)获取位置,但却无法获取位置。或者我需要为GPS和网络编写监听器)。我不知道问题出在哪里。有人能帮帮我吗?
另外,它是否仅在所有提供程序(Wifi、GPS、Network)都可用时才起作用?
public void checkPlay(){

  int resp = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
    if (resp == ConnectionResult.SUCCESS) {
        locationClient = new LocationClient(this, this, this);
        locationClient.connect();
    } else {
        Toast.makeText(this, "Google Play Service Error " + resp,
                Toast.LENGTH_LONG).show();

    }
 }


public void onConnected(Bundle arg0) {
    // TODO Auto-generated method stub


    if (locationClient != null && locationClient.isConnected()) {

        locationRequest = LocationRequest.create();
        locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
        locationRequest.setInterval(100);
        locationClient.requestLocationUpdates(locationRequest, this);

    }
}

        public void onLocationChanged(Location location) {
    // TODO Auto-generated method stub
    try {
        if (location != null) {
            lat = location.getLatitude();
                            long = location.getLongitude();
        }
    } catch (Exception e) {
        Log.d(Fots.TAG,
                "GpsTrackService.mGpsLocationListener.onLocationChanged", e);

    }       
}

参考这个链接可能对Android应用程序中的GPS和Google地图有所帮助:http://wptrafficanalyzer.in/blog/gps-and-google-map-in-android-applications-series/ - Aravin
你如何测试位置更新? - Rachit Mishra
我在服务中编写了onLocationChanged()。当我登录应用程序时,服务将启动并每1分钟运行一次服务,并使用“locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);”每5秒获取一次位置更新。 - Raja45
1
嗨Aravinth,所提到的链接使用了旧版的位置API。它使用LocationManager、GeoCoder。但是我正在使用新版的位置API(Fused Location Provider),它使用GooglePlayServices。 - Raja45
我曾经遇到过同样的问题,也许是通过Google Play服务版本3.2.65(及以上版本)解决了。您现在还有这个问题吗? - jHaur
@Raja45 如果这篇回答对你有帮助,请选择这个答案:https://dev59.com/83bZa4cB1Zd3GeqPDj5F#20177685。谢谢。 - muneikh
3个回答

8

Fused API提供了3种位置服务提供者。

  1. HIGH_ACCURACY(高精度)
  2. BALANCED_POWER(平衡功耗)
  3. NO_POWER(无功耗)

HIGH_ACCURACY模式使用所有位置提供者,但是它会优先考虑位置提供者,并包括GPS。该模式的位置精度大约在10米范围内。

BALANCED_POWER模式在其位置提供者列表中排除了GPS,并使用其他基于基站、wifi等的提供者。在这种情况下,位置精度大约为40米。

NO_POWER不使用任何位置提供者,而是从其他应用程序 passively 获取位置。精度可能达到一英里或更高。它完全基于最近由其他应用程序获取的位置。


2

如果你在室内,GPS可能无法工作。所以它会退而求其次,使用wifi/三角定位。


2
如果你在示例中使用PRIORITY_HIGH_ACCURACY,它将使用所有可用的源(wifi、蜂窝网络、GPS和内部传感器)。如果关闭wifi并且在室内,通常无法获取GPS锁定(通常GPS在室内不起作用,除非你靠近窗户)。如果没有可用的wifi、蜂窝网络和GPS(因为它们在设置中被关闭或者在你的特定位置不可用),它将不会返回位置信息(仅有内部传感器不足以从头开始创建位置信息)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接