2012-08-07 73 views
0

我使用cordova-2.0.0並且想要定義用戶位置的協調。 此外,我只想得到GPS座標,而不是網絡。 我該怎麼做? 爲什麼gps-logo不會顯示在狀態欄中?爲什麼gps-logo不會顯示在狀態欄中?

我的代碼的index.html腳本:

function onSuccess(position) { 
     var element = document.getElementById('geolocation'); 
    element.innerHTML = 'Latitude: '+ position.coords.latitude + '<br />' + 
         'Longitude: '+ position.coords.longitude + '<br />'; 
    } 

// onError Callback receives a PositionError object 
    // 
function onError(error) { 
    var element = document.getElementById('geolocation'); 
    element.innerHTML = 'code: ' + error.code + '\n' + 
       'message: ' + error.message + '\n'; 
} 

// Wait for PhoneGap to load 
    document.addEventListener("deviceready", onDeviceReady, false); 

// PhoneGap is ready 
    function onDeviceReady() { 
    navigator.geolocation.getCurrentPosition(onSuccess, onError); 
} 

回答

0

對於您的更新要求,您將不得不創建一個原生插件,它將檢查GPS狀態,並根據您可以在HTML頁面中放置警報的狀態進行檢查。

訪問here瞭解有關在Android上創建本機插件的教程。

+0

好吧,我會嘗試去做。謝謝。 – Iorlin 2012-08-09 05:54:41

1

哦,這是很容易。 選項 - enableHighAccuracy:true。它的工作:)

function onDeviceReady() { 
       // Update every 3 seconds 
       var options = { frequency: 3000, enableHighAccuracy: true }; 
       watchID = navigator.geolocation.watchPosition(onSuccess, onError, options); 
      } 

但我怎麼能定義供應商使用科爾多瓦API?例如:如果gps關閉,應用程序確實會發出警報(「請切換gps!」);

+0

https://github.com/BastienL/GPSDetector – F481 2013-07-04 06:33:14

0

如果在狀態欄中看不到GPS標誌,這是因爲GPS無法啓動。也許一個JS文件沒有加載?

Cordova/phonegap不是原生代碼,只有三個選項可以放在watchPosition()函數中:maximumAge,timeout和enableHighAccuracy(使用GPS)。您可以將trueHighAccuracy設置爲true,以使用GPSProvider而不是NetworkBaseProvider。 也許你可以分析onError函數中的錯誤信息,以查看GPS禁用時是否發送特殊消息。

編輯:在我的測試中,沒有特殊的消息設計器,只是一個超時消息:「位置檢索超時。」所以我認爲你不能檢查是否GPS在科爾多瓦開或關...

在我看來,科爾多瓦/ phonegap(和所有的「跨平臺」技術)不是一個很好的選擇開發一個應用程序使用GPS和其他經理如TelephonyManager。

沒有什麼可以替代原生代碼。

我有另外一個問題:GPS不停止,當我使用clearWatch(): 在這裏,我的代碼:

var currentTracking = false; 
var idwatch = null; 

function switchTracking() { 
    //when button is pressed to start GPS 
    if (!currentTracking) { 
     currentTracking = true; 
     document.getElementById('switchTracking').value = "Stop GPS" 
     tracking(); 
    } 

    //when button is pressed to stop GPS 
    else { 
     navigator.geolocation.clearWatch(idwatch); 
     currentTracking = false; 
     document.getElementById('switchTracking').value = "Start GPS" 
    } 
} 

function tracking() { 
    if (currentTracking) { 
     idwatch = navigator.geolocation.watchPosition(onSuccess, onError,{ timeout: 5000, enableHighAccuracy: true }); 
    } 
    else{ 
     navigator.geolocation.clearWatch(idwatch); 
    } 
} 

function onSuccess(position) { 
    // alert("Gps"); 

    var lat = document.getElementById('lat'); 
    var long = document.getElementById('long'); 
    lat.innerHTML = position.coords.latitude; 
    long.innerHTML = position.coords.longitude; 
} 

// onError Callback receives a PositionError object 
// 
function onError(error) { 
    alert('code: ' + error.code + '\n' + 
      'message: ' + error.message + '\n'); 
}