我有一个获取位置信息的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
完成从未被调用)。
我已经:
- 在清单文件中添加了
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
(除了粗略和精细位置之外)。 - 尝试更改模拟器上的Google位置设置(高精度、节省电池、仅设备)
- 尝试从模拟器的 GUI 中设置位置。
- 尝试打开和关闭模拟器的“使用检测到的ADB位置”选项。
- 尝试使用
adb -s emulator-5555 emu geo fix 12.34 56.78
(命令可行,请继续阅读以了解原因)
我仍然无法让我的应用程序获得位置更新。我尝试了模拟器内置的 Google 地图,它完美地获得了位置更新,当我通过 geo fix 发送不同的坐标时,我可以立即看到地图上当前位置的变化。
但我的应用程序完全不知道位置更新。我甚至尝试等待至少 2 分钟(我的位置请求间隔)再发送另一个坐标。我做错了什么?