Android 5.0中的融合位置提供商行为意外

时间:2015-08-09 15:46:27

标签: android location fusedlocationproviderapi android-fusedlocation

我正在尝试使用android融合位置提供程序,使用 PRIORITY_HIGH_ACCURACY 每30分钟获取一次设备位置。 令人惊讶对我来说是什么,

当禁用GPS时,我希望API能够利用网络提供商和传感器为我提供精确度不高的位置。但是,在这种情况下,API返回的位置是 null for Android 5.0

这种行为在Android 4.0中有所不同,它给我的位置准确性不如预期。我找不到任何关于此的文档!有什么想法吗??

编辑:刚才意识到,拥有Android 5.0的设备没有SIM卡,这是否意味着如果没有SIM卡,融合位置提供商将不会考虑使用WiFi来查找最佳位置?

1 个答案:

答案 0 :(得分:0)

关闭设备位置后,缓存将被清除,因此您应将LocationRequest与PRIORITY_HIGH_ACCURACY一起使用。您可以将LocationCallBack用作弱引用,以便避免内存泄漏。您必须在onStop()中删除位置更新。这样的代码,

            LocationRequest locationRequest = LocationRequest.create();
            locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
            locationRequest.setInterval(2000);
            LocationCallback locationCallback = new LocationCallback() {
                @Override
                public void onLocationResult(LocationResult locationResult) {
                    super.onLocationResult(locationResult);
                    if (locationResult == null || locationResult.getLastLocation() == null)
                        return;
                    updateLocation(locationResult.getLastLocation());
                }
            };

            fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, null);