【发布时间】:2017-05-24 09:47:00
【问题描述】:
我有一个可以获取位置的 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(命令有效,继续阅读以了解原因)
我仍然无法让我的应用获取位置更新。我已经尝试了模拟器的内置谷歌地图,它可以完美地更新位置,当我通过地理修复发送不同的坐标时,我可以看到地图上的当前位置立即发生变化。
但我的应用完全不知道位置更新。在发送另一个坐标之前,我已经尝试等待至少 2 分钟(我的位置请求间隔)。我做错了什么?
【问题讨论】:
-
请检查您的模拟器中是否有google play服务。如果你有然后更新它。
-
@jiteshmohite 它连接到服务没有错误,所以我猜它有它
-
这方面有什么更新吗?在我使用的所有模拟器上看到相同的行为。
-
@BrandonScott 不幸的是,我在没有找到任何东西后放弃了。我尝试使用该设备,当不可用时,在模拟器中测试时将一些坐标硬编码到代码中。不过我很想看到一个解决方案。
-
@Can Poyrazoğlu 同样在这里,应用程序连接到客户端,telnet geo fix 工作正常(在模拟器上的地图上测试),但是永远不会调用 onLocationChanged()。到目前为止找到解决方案的运气好吗?
标签: android android-emulator location fusedlocationproviderapi android-fusedlocation