Android Fusion Location Provider API声称位置更新不在室内工作
问题: 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应用程序在室内
LocationClient
实现最新的位置API来获取位置更新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