Android应用程序无法使用FusedLocationApi访问模拟器上的位置

我有一个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尝试设置位置。
  • 尝试打开和closures仿真器的“使用检测到的ADB位置”选项。
  • 试过adb -s emulator-5555 emu geo fix 12.34 56.78 (命令有效,请继续阅读,看看为什么)

我仍然无法让我的应用获取位置更新。 我试过了模拟器的内置Google Maps,它完全获取位置更新,当我通过地理修补发送不同的坐标时,我可以立即看到地图上的当前位置。

但我的应用程序完全不知道位置更新。 我已经尝试等待至less2分钟(我的位置请求间隔),然后再发送另一个坐标。 我究竟做错了什么?

Solutions Collecting From Web of "Android应用程序无法使用FusedLocationApi访问模拟器上的位置"

我遇到了模拟器上的相同的问题。 我发现唯一的修复是使用PRIORITY_HIGH_ACCURACY。

说明:这是强制android打开GPS芯片的唯一选项(在仿真器的情况下为虚拟芯片)。 在真实的设备上,这不是一个问题,因为手机可以使用蜂窝接收和WiFi来找出大概的位置。 在仿真器上没有信元接收,无线networking被抽象为networking连接。 所以模拟器几乎只能使用GPS进行定位。

如果您真的不想在实际应用程序中使用PRIORITY_HIGH_ACCURACY,则可以为FusedLocationApi创build(或查找示例应用程序),准确性设置为PRIORITY_HIGH_ACCURACY。 在运行实际应用程序(PRIORITY_BALANCED_POWER_ACCURACY)之前运行该程序,并且会有最后一个已知位置可用。