我有一个Android应用程序获取位置:
private LocationRequest createLocationRequest() { LocationRequest mLocationRequest = new LocationRequest(); mLocationRequest.setInterval(120000); mLocationRequest.setFastestInterval(60000); mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY); return mLocationRequest; } private GoogleApiClient getLocationApiClient(){ return new GoogleApiClient.Builder(App.instance) .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .addApi(LocationServices.API) .build(); } ... apiClient = getLocationApiClient(); apiClient.connect(); @Override public void onConnected(@Nullable Bundle bundle) { ... LocationRequest locationRequest = createLocationRequest(); LocationServices.FusedLocationApi.requestLocationUpdates(apiClient, locationRequest, new LocationListener() { @Override public void onLocationChanged(Location newLocation) { //***THIS IS NEVER CALLED ON EMULATOR*** } }); }
在设备上运行时(Galaxy S3,Android 4.4.4)完全没有问题.在模拟器上运行时(Android Studio默认qemu,Android 7.1,x86-64)我没有在我的应用程序上获取位置.onConnected
被调用,我甚至可以读取最后一个位置,但我不会得到任何位置更新(requestLocationUpdates
完成从未调用).
我有:
添加
到清单(除了粗略和精细的位置).
尝试在模拟器上更改Google位置设置(高精度,省电,仅限设备)
从仿真器的GUI中尝试设置位置.
尝试打开和关闭转动仿真器的"使用检测到的ADB位置"选项.
尝试adb -s emulator-5555 emu geo fix 12.34 56.78
(命令工作,继续阅读,看看为什么)
我仍然无法让我的应用程序获取位置更新.我已经尝试过模拟器的内置Google地图,它可以完美地获取位置更新,当我通过地理位置修复发送不同的坐标时,我可以看到地图上的当前位置立即发生变化.
但我的应用程序完全不知道位置更新.在尝试发送另一个坐标之前,我已经尝试等待至少2分钟(我的位置请求间隔).我究竟做错了什么?