2016-01-16 14 views
0

我正在使用英特爾XDK開發應用程序,我在這裏專門用android(Nexus 6P)進行測試。如果位置服務關閉,英特爾XDK地理位置不會找到經緯度

我已經爲科爾多瓦添加了科爾多瓦地理位置插件以及Google位置服務,並且已開始測試我的位置服務,並且它正確地獲得了插件的位置。

但是,當我關閉位置服務時,什麼也沒有出現。

這是我目前使用獲得的位置代碼:

document.addEventListener("deviceready", onDeviceReady, false); 
 
function onDeviceReady() { 
 
    var Geo={}; 
 
    if (navigator.geolocation) { 
 
     console.log('Started location'); 
 
     console.log(cordova.plugins.locationServices.geolocation.getCurrentPosition(success, error)); 
 
     //navigator.geolocation.getCurrentPosition(success, error, {enableHighAccuracy:true, maximumAge:Infinity, timeout:100000}); 
 
    } 
 

 
    //Get the latitude and the longitude; 
 
    function success(position) { 
 
     console.log('SUCCESS location'); 
 
     Geo.lat = position.coords.latitude; 
 
     Geo.lng = position.coords.longitude; 
 
     populateHeader(Geo.lat, Geo.lng); 
 
    } 
 

 
    function error(){ 
 
     console.log("Geocoder failed"); 
 
    } 
 

 
    function populateHeader(lat, lng){ 
 
     $('#Lat').attr('data-lat', lat); 
 
     $('#Long').attr('data-long',lng); 
 
    } 
 
}

我後,要麼要求用戶對位置數據切換的方式,或者甚至更好的是獲得用戶的位置而不需要位置服務。

回答

0

你說「當我關閉位置服務時」我假設你的意思是你已經進入了Android設置並禁用了「位置記錄」或關閉了設備上的共享「位置」。在這種情況下,您將不會獲取任何數據,因爲用戶選擇不共享該信息。請參閱自述文件中有關這兩種插件的警告,這被認爲是非常敏感的數據,因此,Android已賦予用戶控制共享此信息的能力。

我不知道是否有一個API可以明確告訴你該數據是否被用戶禁用。無論如何,你應該報告,你不能得到你所需要的數據,這可能是由於多種原因:

  • 位置數據的共享已經被用戶禁用
  • 設備無法獲取當前位置,此時
  • 當前「位置模式」是不允許的位置檢索

然後按照了什麼改變或者爲了使數據修復一些建議被收集和使用。當然,如果用戶不希望與您的應用程序共享該信息,那麼您必須優雅地遵守。


編輯2017年2月23日:請參見下面的註釋參考了一些插件,可以幫助確定是否位置服務。

+0

好的很酷。那麼有沒有一種方法可以讓我的應用程序打開位置數據設置,以便像其他應用程序一樣使用XDK? –

+0

如果它不在您使用的插件中(我認爲它們只提供地理API)或者某些巧妙使用意圖(有插件),則需要Cordova插件。搜索一個Cordova或PhoneGap插件來做這件事,或者檢查它是如何在本地Java中完成的,如果它可以用意圖完成(我不知道它是如何完成的)。如果必須使用插件完成,您可以修改其中一個地理插件來添加額外的API調用來實現這一點 - 這些插件的其中一個優點是開源。 :) – xmnboy

+0

太棒了。我確實有一個很好的舊面貌,但不能完全找到我在這方面尋找的東西,但我會深入挖掘並在接下來的幾個小時內彙報。非常感謝你! –

0

您必須通過「選項」來確定「超時」的時間,以便返回錯誤! =)

function cbSucessGeo(p) 
{ 
    console.log(p); //current GPS coordinates 
} 

function cbFailGeo(e) 
{ 
    switch(e.code) 
    { 
     case 1: 
      alert("PERMISSION DENIED"); 
      break; 
     case 2: 
      alert("POSITION_UNAVAILABLE"); 
      break; 
     case 3: 
      alert("TIMEOUT"); 
      break; 
     default: 
      alert("UNKNOWN ERROR"); 
      break; 
    } 
} 

var options = { timeout: 5000, maximumAge: 0, enableHighAccuracy: true }; 

navigator.geolocation.getCurrentPosition(cbSucessGeo, cbFailGeo, options); 

如果關閉GPS,超時間隔(如果指定)後調用onError回調。如果沒有指定timeout參數,則不會調用回調。

和平! =)