Android 中的融合位置提供程序

Posted

技术标签:

【中文标题】Android 中的融合位置提供程序【英文标题】:Fused Location Provider in Android 【发布时间】:2013-09-01 17:56:52 【问题描述】:

我正在使用 Fused Location Provider 开发应用程序。我有个疑问。为了定期获取位置,它使用 requestLocationUpdates()。但它从哪个来源获取位置,无论是从 WIFI 还是 GPS 或网络。在我的应用程序中,只有当 WiFi 开启时,它才会定期获取位置。当 WiFi 处于关闭状态时,它无法获取位置(它应该从 GPS 或网络的其他来源获取位置。但它永远不会获取位置。或者我必须为 GPS 和网络编写侦听器)。我不知道是什么问题。谁能帮帮我。

而且,它是否仅在所有提供商(Wifi、GPS、网络)可用时才有效。

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);

           

【问题讨论】:

推荐这个可能有帮助wptrafficanalyzer.in/blog/… 如何测试位置更新? twntee..我在服务中写 onLocationChanged()。当我登录到应用程序时,该服务将启动并每 1 分钟运行一次服务,并使用“locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);”每 5 秒获取一次位置更新 Hai Aravinth,引用的链接使用旧的位置 API。它使用 LocationManager、GeoCoder。但我正在使用使用 GooglePlayServices 的新位置 API(融合位置提供程序)。 我遇到了同样的问题,Goole Play Services 版本 3.2.65(及更高版本)可能已经解决了这个问题。你还有这个问题吗? 【参考方案1】:

Fused API 提供 3 个位置提供程序。

    HIGH_ACCURACY BALANCED_POWER NO_POWER

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

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

NO_POWER 不使用任何位置提供程序,而是从其他应用程序获取位置的被动模式。准确度可能是一英里或更多。它仅基于其他应用程序最近获取的位置。

【讨论】:

【参考方案2】:

如果您在示例中使用 PRIORITY_HIGH_ACCURACY,它将使用所有可用资源(wifi、手机、gps 和内部传感器)。如果您关闭 wifi 并且在室内,您可能无法获得 gps 锁定(通常 gps 无法在室内工作,除非在某些区域靠近窗户时)。如果 wifi、cell 和 gps 不可用(因为它们在设置中被关闭或者它们在您的特定位置不可用),它不会返回位置(仅内部传感器不足以创建从头开始的位置)。

【讨论】:

【参考方案3】:

如果您在室内,GPS 可能无法工作。所以它会回到wifi /三角测量。

【讨论】:

以上是关于Android 中的融合位置提供程序的主要内容,如果未能解决你的问题,请参考以下文章

重新启动活动时,Android Wear 上的融合位置提供程序会导致崩溃

融合的位置提供程序 setsmallestDisplacement 在 Android 中不起作用

位置为空融合位置提供者android

融合位置提供程序 - 通过位移更新位置不起作用

融合位置提供程序和“Wi-Fi 和移动网络位置”设置

Android 融合位置更新