Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

Fix for “GPS Provider Disabled” using Apache Cordova on Android

DZone's Guide to

Fix for “GPS Provider Disabled” using Apache Cordova on Android

· Mobile Zone
Free Resource

Discover how to focus on operators for Reactive Programming and how they are essential to react to data in your application.  Brought to you in partnership with Wakanda

The Problem

I recently ran into the issue of “GPS Provider Disabled” when using Apache Cordova on Android. After reading many threads, the fix seemed to always be to set the permissions in config.xml with the following code:

<gap:plugin name="org.apache.cordova.geolocation" />
<feature name="http://api.phonegap.com/1.0/geolocation"/>

After doing that, you would need to check Settings –> Location and make sure it is on.

If it didn’t work after that, well you were pretty much on your own…

The Resolution

After digging I found that if I include enableHighAccuracy to false, then it would use Assisted GPS rather than satellite positioning. Sure, the results may not be as high as you would like but it is better than an ugly dialog box saying “GPS Provider Disabled”.

Here is a full sample:

<!DOCTYPE html>
<html>
  <head>
    <title>Device Properties Example</title>
 
    <script type="text/javascript" charset="utf-8" src="cordova-2.5.0.js"></script>
    <script type="text/javascript" charset="utf-8">
 
    // Wait for Cordova to load
    //
    document.addEventListener("deviceready", onDeviceReady, false);
 
    var watchID = null;
 
    // Cordova is ready
    //
    function onDeviceReady() {
        // Changed this from true to false to prevent dialog popup on Android devices.
        var options = { enableHighAccuracy: false };
        watchID = navigator.geolocation.watchPosition(onSuccess, onError, options);
    }
 
    // onSuccess Geolocation
    //
    function onSuccess(position) {
        var element = document.getElementById('geolocation');
        element.innerHTML = 'Latitude: '  + position.coords.latitude      + '<br />' +
                            'Longitude: ' + position.coords.longitude     + '<br />' +
                            '<hr />'      + element.innerHTML;
    }
 
    // clear the watch that was started earlier
    // 
    function clearWatch() {
        if (watchID != null) {
            navigator.geolocation.clearWatch(watchID);
            watchID = null;
        }
    }
 
    // onError Callback receives a PositionError object
    //
    function onError(error) {
      alert('code: '    + error.code    + '\n' +
            'message: ' + error.message + '\n');
    }
 
    </script>
  </head>
  <body>
    <p id="geolocation">Watching geolocation...</p>
    <button onclick="clearWatch();">Clear Watch</button>     
  </body>
</html>

Wrap-Up

I hope that helps anyone out there that is having problems with this!

Learn how divergent branches can appear in your repository and how to better understand why they are called “branches".  Brought to you in partnership with Wakanda

Topics:

Published at DZone with permission of Michael Crump. See the original article here.

Opinions expressed by DZone contributors are their own.

THE DZONE NEWSLETTER

Dev Resources & Solutions Straight to Your Inbox

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

X

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}