2012-05-14 13 views
14

私はTitaniumのAndroid 3.2以降のアプリを開発中です。私は、デバイスがGPSを有効にしているかどうかを判断することが不可欠です。 Titanium APIリファレンスによると、Ti.Geolocation.locationServicesEnabledは、新しい「パッシブ」ロケーションプロバイダのために、Android 2.2以降で常にtrueを返します。 GPSが本当に有効になっているかどうかを判断する他の方法はありますか?GPSを有効にしてAndroidでAndroidを使用するかどうかを確認する

ありがとうございました。私はこのコードをあなたのために働くべきだと思い

+0

、それを試してみてください....ます。http://developer.appcelerator.com/question/120540/titaniumgeolocationlocationservicesenabled-is-always-true – JohnWhite

答えて

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

ランタイムエラーがあるには方法がどのようにすることができませんisLocationProviderEnabledありこれを修正する –

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; 


     } 
    });  
関連する問題