cordova-plugin-geolocation
cordova-plugin-geolocation copied to clipboard
Turning Location services on after timeout
Hi,
I am currently fixing some kinks with the geolocation in an application I am making.
As soon as the application boots, it calls the getCurrentLocation function.
I have noticed that if I open the application with location services disabled, then turn it on a few second after load, or after a TIMEOUT error, later calls of getCurrentLocation function do not work.
Typically I see that when I run the getCurrentLocation function, the GPS icon flashes in the statusbar of the phone, and the success method is executed. However, if a run the getCurrentLocation function after a TIMEOUT, or loading the application with location services off then turning them on later, the GPS icon does not appear and the error method is executed.
Does anyone have a solution to resolve this behavior?
Thanks
What platform?
Sorry, Andoid 8.0.0.
Haven't tested on iOS yet.
Is this consistent on other Android versions as well? Can it be reproduced in an emulator?
I have reproduced the problem with an older device which is using 5.0.1.
Unfortunately I can't isolate the problem.
I have rebuilt the project several times and the new projects never exhibit the same behavior. Everything between projects is identical, I am not sure why the original project is causing the issue.
(Anecdotally I have read/heard multiple times that geolocation is fishy when the app is started without the permissions and only then added - but afaik nobody was ever able to give a good reproduction case :( )
This issue is frequently occuring for me now, I am not sure why, but now I can't get fix it, here are the steps I take to reproduce it:
cordova create test --id "com.test.test" --name "test"
cd test
cordova plugin add cordova-plugin-geolocation
Delete everything in the init.js and replace with:
document.addEventListener("deviceready",function(){
getGps();
},false);
function getGps(){
navigator.geolocation.getCurrentPosition(gpsSuccess, gpsError,{timeout:5000,maximumAge:10000,enableHighAccuracy:true});
}
function gpsSuccess(position) {
alert('Success');
}
function gpsError(error) {
alert('GPS Error: code: '+error.code+'\n'+'message:'+error.message+'\n');
getGps();
}
cordova platform add [email protected]
cordova run android
Turn Location on before running the application, you will see it works. Exit the application. Turn Location off. Re-enter the application. Wait for the timeout alert. Turn Location on. Notice that the application never accesses the location.
Tested on Android 8.0.0 and 5.0.1
Turn Location on. Notice that the application never accesses the location.
Do you restart the app in between those steps or call getGps
manually somehow? Otherwise that doesn't look to wrong from what you wrote - deviceready
won't fire again after turning location on I guess?
Nah, I don't leave the app. The getGps() is called every time the request times out. So every time you see the error alert, it should run the getGps() function again.
Am I wrong about that? I think it works because I see errors every 5 seconds.
Thanks for editing my post :)
Ah, I missed the getGPS()
in the error handler.
Could you upload that project to Github so a developer just has to clone that instead of doing those steps manually?
Sure thing, https://github.com/Danbardo/cordova_geolocation_bug
is there any update here? i have exactly the same issue in my application.
I've never encountered this issue myself, but considering that we do not actually have any geolocation implementation for android (the plugin just handles declaring capabilities and permissions)... it sounds like an issue with the chrome webview.
Closing as stale.