简体   繁体   中英

Genymotion's locationing requesting the locations too fast

I made a simple location service using Fused location , i test with a real device and with Genymotion's android virtual device.

The iterval for getting the locations are 5 seconds.

On a real device it is works nicely, the interval is almost exactly 5 seconds , check log: ( onLC is for 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!

On Genymotions virtual device the interval is like 1 second:

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!

Code for initalizing location requests:

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

Can anybody help me whats happening here?

You expect that Fused location will work on emulator? Fused location is all about fusing mobile/wifi/gps signals - do you expect Genymotion mocks mobile/wifi/gps so that it inputs some meaningful data to Fused location ? I don't think so.

Anyway if you look at setInterval you'll see:

You may also receive them faster than requested (if other applications are requesting location at a faster interval).

So setting mLocationRequest.setInterval(5000); actually doesn't mean anything.

Simply adding mLocationRequest.setFastestInterval(5000); did the trick, now Genymotion's Virtual Device also requesting location updates in a 5 seconds interval.

The Genymotion gets location info immediately, and pass it to your app, so it don't need to wait, like on real device. It doesn't emulate (or simulate) process of finding GPS satellites, like in real GPS sensor, and also, it using your PC internet speed, instead of a mobile GPRS or public Wi-Fi, so it also gets your location from it almost immediately. The same do an ADB emulator. You should using real device for testing location services.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM