2013-11-27 48 views
5

我試圖使用PhoneGap的使用API​​文檔,但得到以下錯誤消息地理位置,Android的地理位置使用PhoneGap的代碼:3錯誤

警報 代碼:3 消息:超時過期

我的代碼,

<script> 

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

var watchID = null; 

// Cordova is ready 
// 
function onDeviceReady() { 
    // Throw an error if no update is received every 30 seconds 
    var options = { timeout: 10000 }; 
    watchID = navigator.geolocation.watchPosition(onSuccess, onError, options); 
} 

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

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

請諮詢我,我錯過了什麼。

回答

0

Phonegap使用與Geolocation API相同的接口,您也可以在沒有Phonegap庫的常規Web應用程序中使用該接口。

the specs

TIMEOUT(數值3)
由超時屬性指定的時間長度之前的實施可以成功獲得一個新的位置的對象是否已經過去。

所以你可以嘗試提供一個更高的超時值作爲參數。如果您的唯一提供商是GPS,則10秒是非常短的時間。在這種情況下,即使在戶外,修復也可能需要40到60秒。

+0

我將超時時間增加到了30000,但仍然沒有運氣 – user2331670

+0

您是否在支持GPS的手機中測試?嘗試90secs並去戶外。你應該能夠得到一個修復 –

+0

去戶外,並設置超時到100000仍然無法正常工作,不斷收到超時消息。任何幫助? –

4

我相信這是一個比較常見的問題,特別是Android設備。一些流行的解決方案,我所遇到的包括

  1. 不要指定錯誤回調:對於一些很奇怪的原因這個作品,如果沒有啓用GPS就會出現你的唯一的問題。儘管如此,我不會在建議的應用中提供這方面的建議。

  2. 在您的選項中指定enableHighAccuracy:true。這似乎工作,但不是自己的,請參閱下面的#3

  3. 在選項中指定maximumAge:我使用這個,並設置它非常高,也許1小時。它所做的是,即使目前沒有GPS,科爾多瓦也會給你最近一個小時內捕獲的最後一個已知座標,所以這取決於你希望你的座標在時間上的精確度。

我通常使用#2和#3的組合,這對於Phonegap 3.x是合理的。

作爲一方,您可以包含一個選項,通過插件爲設備的錯誤回調設置啓動一個意圖,以便用戶可以啓用他們的GPS,如果禁用(如使用手機時的谷歌地圖用於導航)。

我希望這會有所幫助。

4

假設你在Android模擬器讓這個問題:

  1. 添加超時,並設置enableHighAccuracy:

    navigator.geolocation.getCurrentPosition(onSuccess, onError, {timeout: 10000, enableHighAccuracy: true}); 
    

    在你需要enableHighAccuracy設置爲false某些仿真器,所以嘗試如果仍然不起作用。

  2. 在Android中,仿真器不讀取GPS值,所以我們需要通過命令行發送它們。我們需要在模擬器運行(你可以在開始檢查模擬器窗口標題端口的數量,在我的情況下,5554)的端口上啓動telnet會話:

    telnet localhost 5554 
    

而且然後運行命令

geo fix -122.4 37.78 

如果你關閉,你需要重新發送地理位置的應用程序,所以如果它不工作,只是剛剛開放的應用程序,超時事件觸發之前之後運行geo fix命令。

如果您使用的是真正的Android設備,請確保它已啓用GPS,和您所安裝的地理位置插件(運行phonegap local plugin add org.apache.cordova.geolocation

+0

幫助'geo fix'命令 – sura2k

+0

thx提醒我關於插件-.-' –

+0

在iOS模擬器上的高精確度來修正問題!謝謝 – cbyte

0

另一個原因器故障(這是我的情況)是安裝apk手動,不要授予相關權限的應用程序。例如:

網絡通訊:查看Wi-Fi狀態,創建藍牙連接, 完整的互聯網接入,查看網絡狀態

您的位置:獲取額外的位置提供命令,罰款(GPS) 位置,模擬位置信息源進行檢測,粗(基於網絡的) 位置

enter image description here

+在關於權限:http://developer.android.com/guide/topics/security/permissions.html

2

我解決了這個問題,爲HTC M8運行最新的Android(物理設備),通過不指定maximumAge和超時。

navigator.geolocation.getCurrentPosition(onSuccess, onError, { 
    // maximumAge: 100, 
    // timeout: 2000, 
    enableHighAccuracy: true 
}); 

在iPhone 5上它工作正常,但Android只返回錯誤。現在這兩個工作沒有問題。我會注意到,我甚至嘗試了1小時最大年齡和高超時時間,但這並沒有奏效。這是適用於所有情況的唯一解決方案。

0

我試過cordova-plugin-geolocation與ngCordova,但它總是返回我超時錯誤,這意味着它不能獲得設備的位置,甚至5分鐘設置超時,所以Android 5.1的最終解決方案至少: 我已經添加權限AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.NETWORK_ACCESS" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

它並非沒有ACCESS_WIFI_STATE許可工作。

現在,即使沒有SIM卡,無線連接和位置啓用它現在可以工作。

如果有人會發現它有幫助。

+0

我在離子3上使用了帶有離子本機的cordova geolocation插件。它不工作,如果我使用超時值,則會收到超時錯誤。沒有超時值我從來沒有迴應。在Android平板電腦上啓用GPS,狀態欄上的GPS圖標出現。我從來沒有對coords的迴應 – Francesco

相關問題