在FusedLocationProviderApi中设置模拟位置>> [

问题描述 投票:5回答:1
我正在尝试从FusedLocationProviderApi获取模拟更新,但似乎无法使其正常工作。这是我在android工具测试中的设置方法:

locationProvider = new LocationProvider(InstrumentationRegistry.getTargetContext().getApplicationContext(), settings); // Connect first, so that we don't receive 'true' location locationProvider.googleApiClient.blockingConnect(); // Set mock mode, to receive only mock locations LocationServices.FusedLocationApi.setMockMode(locationProvider.googleApiClient, true); InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { @Override public void run() { // Start receiving locations; this call will connect api client, and if it's already connected (or after it connects) it will register for location updates locationProvider.start(); } }); // wait until we can request location updates while (!locationProvider.isReceivingLocationUpdates) { Thread.sleep(10); }

在此之后,我希望对LocationServices.fusedLocationApi.setMockLocation(apiClient, location)的任何调用都可以设置我的听众将收到的模拟位置。不幸的是,事实并非如此,听众保持沉默。

我设置模型位置的万无一失的方法(如下所示:

private void setMockLocation(final Location location) throws Exception { assertTrue(locationProvider.googleApiClient.isConnected()); assertTrue(locationProvider.isReceivingLocationUpdates); final CountDownLatch countDownLatch = new CountDownLatch(1); LocationServices.FusedLocationApi.setMockMode(locationProvider.googleApiClient, true) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { assertTrue(status.isSuccess()); LocationServices.FusedLocationApi.setMockLocation(locationProvider.googleApiClient, location) .setResultCallback(new ResultCallback<Status>() { @Override public void onResult(Status status) { assertTrue(status.isSuccess()); countDownLatch.countDown(); } }); } }); assertTrue(countDownLatch.await(500, TimeUnit.MILLISECONDS)); }

方法成功返回,但是侦听器未收到任何位置。我真的很茫然。最糟糕的部分是测试有时会通过,但会非常随机(到执行多次相同的代码会通过并在后续调用中失败的地步)。为了完整性,我的调试清单具有以下权限:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />

我已在设置中允许模拟位置。

我正在尝试从FusedLocationProviderApi获取模拟更新,但似乎无法使其正常工作。我在Android工具测试中的设置方法:locationProvider = new LocationProvider(...

android testing google-play-services fusedlocationproviderapi android-fusedlocation
1个回答
0
投票
这是我们更新的Kotlin版本。请注意,您需要在开发选项中选择该应用程序作为模拟位置提供程序,并具有在调试清单文件中进行设置的权限。
© www.soinside.com 2019 - 2024. All rights reserved.