2013-11-27 12 views
5

Sto cercando di utilizzare la geolocalizzazione utilizzando PhoneGap API doc ma ottenere sotto il messaggio di errore,Android geolocalizzazione codice utilizzando PhoneGap: 3 Errore

Alert codice: 3 messaggio: Timeout scaduto

Il mio codice è,

<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'); 
} 

Si prega di consulenza me quello che mi manca.

risposta

0

PhoneGap utilizza la stessa interfaccia dell'API di geolocalizzazione, che è possibile utilizzare anche in normali app Web senza le librerie Phonegap.

Da the specs:

timeout (valore numerico 3)
Il periodo di tempo specificato dalla proprietà di timeout è trascorso prima che l'attuazione potrebbe acquisire con successo un nuovo oggetto di posizione.

Quindi è possibile provare a fornire un valore di timeout superiore come parametro. 10 secondi sono tempi molto brevi se il tuo unico fornitore è il GPS. In questo caso, ottenere una correzione potrebbe richiedere da 40 a 60 secondi anche all'aperto.

+0

Ho aumentato il timeout a 30000 ma ancora senza fortuna – user2331670

+0

Stai provando in un telefono abilitato GPS? Prova con 90secs e vai all'aperto. Dovresti essere in grado di ottenere una correzione –

+0

Andare all'aperto e impostare il timeout su 100000 continua a non funzionare, continua a ricevere il messaggio di timeout. Qualsiasi aiuto? –

4

Credo che questo sia un problema relativamente comune, specialmente con i dispositivi Android. Alcuni dei soluzione popolare mi sono imbattuto includono

  1. Non specificare la richiamata errore: Per qualche motivo davvero strano questo funziona, il vostro unico problema si porrà se il GPS non è abilitato. Non lo consiglierei in un'app di produzione.

  2. Specificare enableHighAccuracy: true nelle opzioni. Questo sembra funzionare ma non da solo, vedere # 3 al di sotto

  3. Specificare maximumAge nelle opzioni: io uso questo e impostarlo molto alto su 1 ora. Quello che fa è che, anche se attualmente non ci sia il GPS, cordova ti darà le ultime coordinate conosciute catturate nell'ultima ora, quindi questo dipende molto dalla precisione con cui vuoi che le tue coordinate siano nel tempo.

Io di solito uso una combinazione di # 2 e # 3 e questo funziona correttamente per Phonegap 3.x.

Come lato, è possibile includere un'opzione per avviare un'intent tramite un plug-in per le impostazioni del dispositivo nella propria richiamata di errore in modo che l'utente possa abilitare il proprio GPS se disabilitato (come fa google maps sul telefono quando lo si usa per la navigazione).

Spero che questo aiuti.

4

Supponendo che hai trovato questo problema in un emulatore Android:

  1. Aggiungi un timeout e impostare enableHighAccuracy:

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

    In alcuni emulatori è necessario impostare enableHighAccuracy su false, in modo da provare che se ancora non funziona

  2. In Android, l'emulatore non legge i valori GPS, quindi è necessario inviarli tramite la riga di comando. Abbiamo bisogno di iniziare una sessione telnet alla porta che l'emulatore è in esecuzione (è possibile controllare la porta nel titolo della finestra dell'emulatore, il numero all'inizio, nel mio caso 5554):

    telnet localhost 5554 
    

E quindi eseguire il comando

geo fix -122.4 37.78 

Se si chiude l'applicazione è necessario inviare nuovamente la geolocalizzazione, quindi se non funziona, basta eseguire il comando geo fix poco dopo l'apertura l'applicazione, prima che l'evento di timeout.

Se si utilizza un vero e proprio dispositivo Android, assicurarsi che ha permesso di GPS, e che è stato installato il plugin di geolocalizzazione (eseguire phonegap local plugin add org.apache.cordova.geolocation)

+0

ha aiutato il comando 'geo fix' – sura2k

+0

per ricordarmi del plugin -.- ' –

+0

alta precisione su simulatore iOS per correggere il problema! grazie – cbyte

0

Un altro motivo per questo malfuntion (era il mio caso) è quello di installare un apk manualmente e non concedere l'autorizzazione correlata all'app. Per esempio:

Comunicazione di rete: visualizzazione stato Wi-Fi, creare connessioni Bluetooth, accesso completo a Internet, statali

vostri posizione vista di rete: accesso comandi del fornitore di posizione extra, fine (GPS) posizione, fonti di localizzazione fittizie per test, grossolana (basata sulla rete) posizione

enter image description here

+ in per le autorizzazioni: http://developer.android.com/guide/topics/security/permissions.html

2

Ho risolto questo problema per un HTC M8 con l'ultimo dispositivo Android (dispositivo fisico) non specificando maximumAge e timeout.

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

Su iPhone 5 ha funzionato bene, ma l'Android ha restituito solo errori. Ora entrambi funzionano senza problemi. Noterò che ho persino provato 1 ora di maximumEge e timeout elevati, e non ha funzionato. Questa è l'unica soluzione che ha funzionato per tutti gli scenari.

0

Ho provato la geolocalizzazione con cordova-plugin con ngCordova ma mi ha sempre restituito l'errore Timeout, il che significa che non è possibile ottenere la posizione del dispositivo nel mio timeout impostato di 5 minuti, quindi la soluzione finale per Android 5.1: ho i permessi aggiunto al 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" /> 

non funzionava senza ACCESS_WIFI_STATE permesso.

Ora funziona anche senza una scheda SIM, con connessione wifi e posizione abilitata.

Nel caso qualcuno lo trovi utile.

+0

Sto usando il plugin di geolocalizzazione di cordova con Ionic nativo, su Ionic 3. Non funziona, Se uso un valore di timeout ricevo un errore di timeout. Senza un valore di timeout non ho mai avuto una risposta. Il GPS è abilitato sul tablet Android, appare l'icona gps sulla barra di stato. Non ho mai avuto una risposta con coords – Francesco

Problemi correlati