Android Fusion Location Provider API声称位置更新不在室内工作

Android Fusion Location Provider API声称位置更新不在室内工作,android,api,location,location-provider,Android,Api,Location,Location Provider,问题: Fusion Location Provider API声称位置更新不在室内工作 发生了什么: 我尝试在我的Android应用程序中使用LocationClient实现最新的位置API来获取位置更新 当我在户外测试时,我的android应用程序运行良好,没有任何问题 但当在室内(任何建筑物内)进行测试时,则不会发生位置更新 预期行为: 根据新的API,当我在室内时,我希望得到建筑物周围的一些估计位置(因为GPS无法找到精确位置的卫星信号) 我看到最新的谷歌地图android应用程序在室内

问题:

Fusion Location Provider API声称位置更新不在室内工作

发生了什么:

  • 我尝试在我的Android应用程序中使用
    LocationClient
    实现最新的位置API来获取位置更新
  • 当我在户外测试时,我的android应用程序运行良好,没有任何问题
  • 但当在室内(任何建筑物内)进行测试时,则不会发生位置更新
  • 预期行为:

    根据新的API,当我在室内时,我希望得到建筑物周围的一些估计位置(因为GPS无法找到精确位置的卫星信号)

    我看到最新的谷歌地图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);
    
    步骤3:内部
    onStart()
    方法-添加以下行:

    // Connect the client.
    mLocationClient.connect();
    
    mLocationClient.requestLocationUpdates(mLocationRequest, this);
    
    步骤4:内部
    onConnected()
    方法-添加以下行:

    // Connect the client.
    mLocationClient.connect();
    
    mLocationClient.requestLocationUpdates(mLocationRequest, this);
    
    步骤5:内部
    onLocationChanged()
    方法-侦听位置更新。测试内部时不调用此方法。只有在找到GPS信号时才调用此方法

    double lat = location.getLatitude();
    double lng = location.getLongitude();
    
    最后在Android清单中添加了以下权限:

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

    根据您的代码片段,我认为您的代码在接收室内位置时很好

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

    你能把输出贴在这里吗

    您是否可以再次检查设置->WiFi是否已启用,以及设置->位置访问->Wi-Fi和移动网络位置是否已启用(室内位置都需要这两种设置)

    你的手机有sim卡吗?当wifi不可用时,这将允许移动基站衍生位置


    最后你说谷歌地图给你在同一栋楼的室内位置。精度圈的大致尺寸是多少(即,它是接近20米还是100米)?

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


    代码片段本身并不是一个完整的应用程序。然而,示例应用程序是一个完整的工作应用程序。这些代码片段的目的是向您展示可以剪切和粘贴的关键步骤。示例应用程序提供了更多资料。

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


    为了确认这是特定设备的问题,我使用我的应用程序在大楼的不同角落进行了许多测试,我在HTC的所有室内位置都看到了相同的问题(但在相同的位置,S3获得了室内位置)。

    tinku!我的Galaxy Nexus和Fusion位置提供程序API也有同样的问题
    我的决定是将
    LocationRequest
    对象的优先级设置为
    LocationRequest.priority\u LOW\u POWER

     mLocationRequest = LocationRequest.create();
    
     mLocationRequest.setPriority(LocationRequest.PRIORITY_LOW_POWER);
    
     mLocationRequest.setInterval(UPDATE_INTERVAL);
     mLocationRequest.setFastestInterval(FASTEST_INTERVAL);
     mLocationClient = new LocationClient(this, this, this);
    

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

    谢谢您的快速回复。我仔细检查,WiFi已启用;在位置访问下,启用Wi-Fi和移动网络位置;sim卡也在工作。在谷歌地图中,在同一栋建筑内进行测试时,定位精度显示为“1300米”。但无法在我的应用程序中获取位置。我很快就会在运行我的应用程序时得到转储,并会更新你。根据你在谷歌地图中获得的准确度,你正在室内接收手机位置,这意味着你的建筑中不提供wifi位置。我猜有一个错误,因为某些原因,细胞定位不起作用。你可以在一个有wifi位置的地方尝试(可能在商场)。不确定是什么原因造成的,但它可能会在未来的版本中得到修复。顺便说一句,如果你发布转储,你可能想删除lat/lng位置以保护隐私-由你决定。在大楼内测试谷歌地图android应用程序时,还有一个观察:1)我移动到最近的WiFi路由器并开始测试,然后我得到了精确到60米的位置。2) 我关掉了WiFi,那么准确度是1600米。但是当我使用我的应用程序尝试相同的测试用例时,我没有在大楼内得到任何位置更新。谢谢你的回复。我使用Toast仔细检查了客户端,它已连接。我得到了示例应用程序并安装到我的手机上。即使在建筑物内使用示例应用程序进行测试,我也无法获得位置(与我的应用程序中的行为相同)。但在谷歌地图中,当同时在同一栋建筑内进行测试时,定位精度显示为“1300米”。你是否认为Google Maps Android应用程序代码可能在做一些额外的检查,而这些检查在开源API中没有讨论。因此,你是说示例应用程序在大楼外工作,而不是在大楼内,没有其他更改。是的,没有做任何更改,我按原样部署了示例应用程序。它在建筑物外部工作正常,但在建筑物内部工作正常。如果默认情况下应用程序中未启用位置服务,并且如果我使用location Intellent启用任何一个位置服务,则客户端不会在onActivityResult方法中重新连接,并且无法获取当前的lo