如何判断是否在使用Titanium的Android上启用了GPS

时间:2012-05-14 19:05:11

标签: android titanium-mobile

我正在使用Titanium中的Android 3.2+应用程序。至关重要的是,我能够确定设备是否启用了GPS。根据Titanium API参考,由于新的“被动”位置提供程序,Ti.Geolocation.locationServicesEnabled将始终在Android 2.2+上返回true。有没有其他方法可以确定GPS是否真正启用?

感谢。

2 个答案:

答案 0 :(得分:1)

我认为这段代码适合你:

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

答案 1 :(得分:0)

好的,这是我提出的一个简单的解决方案,它适用于我。我有一个全局变量'timeStamp',我最初设置为零。

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;


        }
    });