Fusion Location Provider API声称,位置更新无法在室内工作

时间:2013-05-28 21:32:31

标签: android api location location-provider

问题:

Fusion Location Provider API声称,位置更新无法在室内工作。

发生了什么:

  1. 我尝试使用我的Android应用中的LocationClient实现最新的位置API以获取位置更新。
  2. 当我在户外测试时,我的Android应用程序可以解决任何问题。
  3. 但在室内(任何建筑物内)进行测试时,不会发生位置更新。
  4. 预期行为:

    根据新的API,我希望在室内时可以获得建筑周围的一些估计位置(因为GPS没有找到卫星信号以获得准确位置)。

    我看到最新的Google Maps Android应用程序在室内工作正常且估计位置。

    问题:

    我还需要注意使用新的位置API来在室内更新位置(不需要准确的位置,精度也很低)。

    我正在使用Android 4.2.2版API实现Android应用。我正在测试HTC One X(OS v 4.1.1)

    以下是我用于使用新API获取位置更新的Android代码:

    第1步:

    mLocationClient = new LocationClient(this, this, this);
    

    步骤2:

    // Create the LocationRequest object
    mLocationRequest = LocationRequest.create();
    // Use high accuracy
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    // Set the update interval to 5 seconds
    mLocationRequest.setInterval(UPDATE_INTERVAL);
    // Set the fastest update interval to 1 second
    mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
    

    Step3:在onStart()方法内 - 添加以下行:

    // Connect the client.
    mLocationClient.connect();
    

    Step4:在onConnected()方法内 - 添加以下行:

    mLocationClient.requestLocationUpdates(mLocationRequest, this);
    

    Step5:在onLocationChanged()方法内部 - 侦听位置更新。在测试内部时不调用此方法。只有在找到GPS信号时才会调用此方法。

    double lat = location.getLatitude();
    double lng = location.getLongitude();
    

    最后在Android Manifest中添加了以下权限:

     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

4 个答案:

答案 0 :(得分:3)

根据您的代码段,您的代码对我来说非常适合接收室内位置。

尝试在您的应用请求位置并且您在室内(希望接收位置但不是)时进行转储: adb shell dumpsys活动服务com.google.android.location.internal.GoogleLocationManagerService

你可以在这里发布输出吗?

您可以仔细检查设置 - &gt; WiFi已启用,以及设置 - >位置访问 - &gt; Wi-Fi&amp;移动网络位置已启用(两者都是室内位置所必需的。)

你的手机有SIM卡吗?当无法使用wifi时,这将允许手机信号塔派生的位置。

最后,您说Google地图可以让您在同一建筑物内的位置。精度圆的大致尺寸是多少(即它是否接近20米或100米)?

答案 1 :(得分:1)

tinku!我的Galaxy Nexus和Fusion Location Provider API也遇到了同样的问题。
我的决定是将LocationRequest对象的优先级设置为LocationRequest.PRIORITY_LOW_POWER

 mLocationRequest = LocationRequest.create();

 mLocationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER);

 mLocationRequest.setInterval(UPDATE_INTERVAL);
 mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
 mLocationClient = new LocationClient(this, this, this);


对我来说,它在室内(低精度)和户外(高精度)下工作正常。 希望它会对你有所帮助。

答案 2 :(得分:0)

你确定你没有断开客户端的连接吗?断开LocationClient后,当前位置更新请求将消失。

代码片段本身是一个完整的应用程序。但是,示例应用是一个完整的应用程序。片段的目的是向您显示关键步骤,您可以从中剪切和粘贴。示例应用程序提供了更多材料。

答案 3 :(得分:0)

经过对HTC One X(4.1.1)的长时间测试和调试,我决定在任何其他手机型号上尝试相同的测试用例。幸运的是,当我和朋友的三星S3(4.1.1)一起测试时,我的应用程序也在室内工作。在同一时间和地点,当我用我的HTC One X测试时,我没有在室内获得位置。两部手机都设置了相同的设置(全部启用了WiFi / GPS /移动网络)。

为了确认这是特定设备的问题,我使用我的应用程序在不同角落的建筑物内进行了多次测试,我在所有室内位置的HTC上看到了相同的问题(但在相同位置S3获取室内位置)