Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error code 3 Timeout when i try to get geolocation using Cordova in platform Android

index.js code:

// debug

function d(s) {
    console.log(s);
    $("#status").text(s);
}

// geo

function geoWin(pos) {
    d("geoWin(): "+pos.coords.latitude+", "+pos.coords.longitude+","+pos.coords.speed);
}

function geoFail(error) {
    d("geoFail(): "+error.code+": "+error.message);
}

function startGeoWatch() {
    d("startGeoWatch()");
    opt = {maximumAge: 0,timeout: 2000, enableHighAccuracy: true};
    watchGeo = navigator.geolocation.watchPosition(geoWin, geoFail, opt);
}

function stopGeoWatch() {
    d("stopGeoWatch()");
    navigator.geolocation.clearWatch(watchGeo);
}

// life cycle

function onPause() {
    d("onPause()");
    stopGeoWatch();
}

function onResume() {
    d("onResume()");
    startGeoWatch();
}

// init

function onDeviceReady() {
    d("onDeviceReady()");
    document.addEventListener("pause", onPause, false);
    document.addEventListener("resume", onResume, false);
    startGeoWatch();
}

function main() {
    document.addEventListener('deviceready', onDeviceReady, false);
}

// main & globals
var watchGeo=null;
main();

my config.xml Code :

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.terokarvinen.geo" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>HelloCordova</name>
    <description>
        A sample Apache Cordova application that responds to the deviceready event.
    </description>
    <author email="[email protected]" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <plugin name="cordova-plugin-whitelist" version="1" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
    <plugin name="cordova-plugin-geolocation" spec="~2.2.0" />
</widget>

AndroidManifest code :

<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="1" android:versionName="0.0.1" package="com.terokarvinen.geo" xmlns:android="http://schemas.android.com/apk/res/android">
    <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
    <uses-permission android:name="android.permission.INTERNET" />
    <application android:hardwareAccelerated="true" android:icon="@drawable/icon" android:label="@string/app_name" android:supportsRtl="true">
        <activity android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale" android:label="@string/activity_name" android:launchMode="singleTop" android:name="MainActivity" android:theme="@android:style/Theme.DeviceDefault.NoActionBar" android:windowSoftInputMode="adjustResize">
            <intent-filter android:label="@string/launcher_name">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23" />
    <uses-permission android:name="android.permission.ACCESS_GPS" />
    <uses-permission android:name="android.permission.ACCESS_ASSISTED_GPS" />
    <uses-permission android:name="android.permission.ACCESS_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
</manifest>

while i try to run this application in firefox it gives my the exact geolocation.But when i try to run this same application in android device .It always give timeout expired.i dnt have any error in console.

I had tested the my application is requested the GPS service of android .I had checked that in location menu which have my application in GPS request.

like image 273
Hassan ALi Avatar asked Nov 09 '22 10:11

Hassan ALi


1 Answers

Based on the myriads of similar questions on Stack Overflow, it seems the Cordova geolocation plugin has issues especially on Android. It seems the solution is to:

  1. Remove the geolocation plugin as follows:

cordova plugin rm org.apache.cordova.geolocation.

Your application will fall back on the standard HTML5 navigator.geolocation functionality.

  1. Of course, double check your location services are on, that your device has coverage (isn't in a building with thick walls, etc. If it is, maybe set enableHighAccuracy to false and set a greater timeout).

  2. Ensure you have the following permissions by adding these lines in your manifest:

< 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_LOCATION_EXTRA_COMMANDS" />

In addition, give your application internet access so it can access Wifi and cellphone antennas:

<uses-permission android:name="android.permission.INTERNET" />

I am unable to try this myself, but you should have better luck after doing this.

Let me know how you get on.

like image 143
Chris Neve Avatar answered Nov 15 '22 07:11

Chris Neve