rogerlsmith
rogerlsmith

Reputation: 6786

How to tell if GPS is enabled on Android using Titanium

I am working on an Android 3.2+ app in Titanium. It is crucial that I am able to determine if the device has GPS enabled. According to the Titanium API reference, Ti.Geolocation.locationServicesEnabled will always return true on Android 2.2+, because of a new "passive" location provider. Is there any other way of determining if GPS is truly enabled?

Thanks.

Upvotes: 14

Views: 3488

Answers (2)

IT_Guy
IT_Guy

Reputation: 223

Alright here is an easy solution I came up with and it works well for me. I have a global variable 'timeStamp' which I initially set to zero.

Titanium.Geolocation.getCurrentPosition(function(e){

        //only update fields if timer is still active
        if(gpsTimer!=null)
        {                   
            //if the provider is not GPS or the timestamp is the same as the last, we do not want the results. We need to alert the user that they need to turn their GPS on. 
            if(e.provider['name']!="gps" || timeStamp==e.coords.timestamp)
            {
                //clear timeout 
                clearTimeout(gpsTimer);
                gpsTimer = null;        
                //close window
                get_gps_win.close();
                //garbage collection
                get_gps_win = null;
                gpsLatField = null;
                gpsLongField = null; 
                gpsAccuracyField = null;
                timeStamp=0;

                //alert user
                alert("This feature is not available unless you have GPS turned on. Please turn GPS on and then try again.");

            }  
            else
            {                   
                //update fields
                gpsLatField.value=ConvertDDToDMSPlain(e.coords.latitude);
                gpsLongField.value=ConvertDDToDMSPlain(e.coords.longitude);
                gpsAccuracyField.value=e.coords.accuracy+" meters/"+(e.coords.accuracy*3.28084)+" feet";     

                gpsTimer=setTimeout(function() {
                   Titanium.Geolocation.fireEvent('location');
                }, 1000);       
            } 

            timeStamp= e.coords.timestamp;


        }
    });     

Upvotes: 0

Vahid Mehrabi
Vahid Mehrabi

Reputation: 674

i think this code should work for you:

//check to see if we have GPS capabilities
if(Titanium.Geolocation.isLocationProviderEnabled(Titanium.Geolocation.PROVIDER_GPS,     Titanium.Geolocation.ACCURACY_BEST) == false) {
var alertDlg = Titanium.UI.createAlertDialog({
    title:'MileTrackGPS', 
    message:'GPS is OFF.  Enable it in Settings.',
    buttonNames: ['Cancel', 'Open Settings']
});
alertDlg.cancel = 0;

alertDlg.addEventListener('click', function(e){
    if(!e.cancel) {
        //open up the settings page
        var settingsIntent = Titanium.Android.createIntent({
            action: 'android.settings.LOCATION_SOURCE_SETTINGS'
        });
        activity.startActivity(settingsIntent);
    }
    else {
        //close the window to exit
        win.close();
    }
});

alertDlg.show();
}

refrence

Upvotes: 1

Related Questions