1

我使用Fused location制作了一个简单的位置服务,我使用真实设备Genymotion 的android 虚拟设备进行了测试。

获取位置的迭代时间为5 秒。

真实设备上它工作得很好,间隔几乎是 5 秒,检查日志:(onLC用于OnLocationChanged

 03-17 11:59:27.115: I/Locationing_GpsService_Test(27147): onLC:Now!
 03-17 11:59:32.189: I/Locationing_GpsService_Test(27147): onLC:Now!
 03-17 11:59:37.259: I/Locationing_GpsService_Test(27147): onLC:Now!
 03-17 11:59:42.171: I/Locationing_GpsService_Test(27147): onLC:Now!
 03-17 11:59:47.215: I/Locationing_GpsService_Test(27147): onLC:Now!
 03-17 11:59:52.240: I/Locationing_GpsService_Test(27147): onLC:Now!

Genymotions 虚拟设备上,间隔为 1 秒:

03-17 12:10:20.280: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:21.270: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:22.269: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:23.271: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:24.273: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:25.273: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:26.275: I/Locationing_GpsService_Test(2616): onLC:Now!
03-17 12:10:27.273: I/Locationing_GpsService_Test(2616): onLC:Now!

初始化位置请求的代码:

    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(5000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

谁能帮我这里发生了什么?

4

3 回答 3

1

您希望这Fused location将在模拟器上运行吗?Fused location就是融合移动/wifi/gps 信号 - 你是否期望Genymotion模拟移动/wifi/gps 以便它输入一些有意义的数据Fused location?我不这么认为。

无论如何,如果您查看setInterval,您会看到:

您也可能比请求更快地收到它们(如果其他应用程序以更快的间隔请求位置)。

所以设置mLocationRequest.setInterval(5000);实际上并不意味着什么。

于 2015-03-17T11:27:21.337 回答
1

简单地添加mLocationRequest.setFastestInterval(5000);就可以了,现在 Genymotion 的虚拟设备也要求每隔 5 秒更新一次位置。

于 2015-03-17T11:50:14.983 回答
1

Genymotion 立即获取位置信息,并将其传递给您的应用程序,因此无需等待,就像在真实设备上一样。它不会模拟(或模拟)寻找 GPS 卫星的过程,就像在真正的 GPS 传感器中一样,而且它使用您的 PC 互联网速度,而不是移动 GPRS 或公共 Wi-Fi,因此它也可以从中获取您的位置几乎立即。ADB 模拟器也是如此。您应该使用真实设备来测试位置服务。

于 2015-03-17T11:50:50.280 回答