3

我知道這個問題已被問過,但我已經嘗試了所有建議的解決方案,似乎沒有任何工作!Phonegap地理位置不適用於Android(Nexus設備)

我正在使用Phonegap構建的移動應用程序(+ Angular,但我不認爲這很重要)。在這個應用程序中,我使用了地理位置插件。更具體地講我的config.xml文件看起來如下:

<?xml version="1.0" encoding="UTF-8" ?> 
    <widget xmlns = "http://www.w3.org/ns/widgets" 
     xmlns:gap = "http://phonegap.com/ns/1.0" 
     id   = "......" 
     version  = "1.0.0" > 

    <name>.....</name> 

    <preference name="permissions"    value="none"/> 

    <preference name="orientation"    value="default" /> 
    <preference name="target-device"    value="universal" /> 
    <preference name="phonegap-version"   value="3.6.3" /> 

    <gap:plugin name="org.apache.cordova.geolocation" /> 
    <gap:plugin name="com.phonegap.plugins.PushPlugin" version="2.4.0" /> 
    <gap:plugin name="org.apache.cordova.network-information" /> 
    <gap:plugin name="org.apache.cordova.statusbar" /> 
    <gap:plugin name="org.apache.cordova.device" /> 
    <gap:plugin name="org.transistorsoft.cordova.background-geolocation"/> 
</widget> 

有,我想獲得用戶的當前位置的時間,所以我做如下:

navigator.geolocation.getCurrentPosition(function (position) { 
    ..... 
}, function (error) {}, { 
    enableHighAccuracy: true, 
    maximumAge: 30000, 
    timeout: 10000 
}); 

這在iOS設備上工作正常,它甚至可以在Android的紋波模擬器上工作。

但是,當我嘗試在Android上運行應用程序並更具體地在Nexus 4和5上運行該應用程序時,地理位置似乎不起作用。這並不是說它給了我一個錯誤,它只是試圖在沒有任何運氣的情況下找回位置。

但是,所有其他正在使用地理位置和瀏覽器中的地理位置的應用程序工作得非常好!

我還想指出,我正在使用Phonegap Build來構建應用程序。

有誰知道我該如何解決這個問題?有沒有人有同樣的問題?

+0

是錯誤回調被調用? phonepap android使用HTML 5地理位置,所以如果它在瀏覽器上工作,它也應該在應用程序上工作 – jcesarmobile

+0

它應該但它不。我也遇到了同樣的問題。該應用在Chrome中正常工作,但無法在Nexus設備上的包裝應用中獲取位置信息。 –

回答

0

從您的代碼示例中,如何知道當您有一個空的錯誤處理程序function (error) {}時不會出現錯誤?

getCurrentPosition()對設備位置發出一個請求。如果這隻被稱爲一次,則位置超時可能在設備上的GPS硬件有機會獲得定位之前發生。

我建議使用watchPosition()來代替設置一個監視器,每次操作系統接收到位置更新時都會調用成功函數。如果您只需要一個位置,則可以清除觀察者,可以選擇檢查以確保您的位置具有可接受的準確性。

例如:

var minAccuracyInMetres = 50; 

var positionWatcher; 

function onDeviceReady(){ 
    positionWatcher = navigator.geolocation.watchPosition(
     geolocationSuccess, 
     geolocationError, 
     {maximumAge:0, timeout: 10000, enableHighAccuracy: true}); 
} 

function geolocationSuccess(position){ 
    // Reject if accuracy is not sufficient 
    if(position.coords.accuracy > minAccuracyInMetres){ 
     return;   
    } 

    // Only single position required so clear watcher 
    navigator.geolocation.clearWatch(positionWatcher); 

    // Do something with the user's location... 

} 

function geolocationError(error){ 
    console.warn("Error while retrieving current position. " + 
    "Error code: " + error.code + ",Message: " + error.message); 
} 

document.addEventListener("deviceready", onDeviceReady, false);