Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Altri Linguaggi - Problema geolocation phonegap + cordova
Forum - Altri Linguaggi - Problema geolocation phonegap + cordova

Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 17:36
Mercoledì, 17/08/2016
Salve ragazzi ho un problema con la geolocalizzazione in phonegap. Posto la procedura (Ubuntu 16.x):

Creo un nuovo progetto
Codice sorgente - presumibilmente Plain Text

  1. cordova create proj com.example.proj Proj



Aggiungo il progetto alla piattaforma android
Codice sorgente - presumibilmente Plain Text

  1. cordova platform add android --save



Aggiungo al progetto il plugin geolocation
Codice sorgente - presumibilmente Plain Text

  1. cordova plugin add cordova-plugin-geolocation



A questo punto apro il file index.html (cartella : proj/www) e lo modifico come segue:
Codice sorgente - presumibilmente Delphi

  1. <!DOCTYPE html>
  2. <html>
  3.     <head>
  4.         <!--
  5.         Customize this policy to fit your own app's needs. For more guidance, see:
  6.            https://github.com/apache/cordova-plugin-whitelist/blob/master/README.md#content-security-policy
  7.        Some notes:
  8.            * gap: is required only on iOS (when using UIWebView) and is needed for JS->native communication
  9.            * https://ssl.gstatic.com is required only on Android and is needed for TalkBack to function properly
  10.            * Disables use of inline scripts in order to mitigate risk of XSS vulnerabilities. To change this:
  11.                * Enable inline JS: add 'unsafe-inline' to default-src
  12.        -->
  13.        <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
  14.        <meta name="format-detection" content="telephone=no">
  15.        <meta name="msapplication-tap-highlight" content="no">
  16.        <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
  17.        <link rel="stylesheet" type="text/css" href="css/index.css">
  18.        <title>Hello World</title>
  19.    </head>
  20.    <body>
  21.        <div class="app">
  22.            <h1>Apache Cordova</h1>
  23.            <div id='geolocation'>Geo...</div>
  24.            <div id="deviceready" class="blink">
  25.                <p class="event listening">Connecting to Device</p>
  26.                <p class="event received">Device is Ready</p>
  27.            </div>
  28.        </div>
  29.        <script type="text/javascript" src="cordova.js"></script>
  30.        <script type="text/javascript" src="js/index.js"></script>
  31.        <script type='text/javascript'>
  32.            app.initialize();
  33.        </script>
  34.    </body>
  35. </html>



Quindi modifico il file index.js (cartella proj/www/js) come segue:
Codice sorgente - presumibilmente Delphi

  1. var app = {
  2.     // Application Constructor
  3.     initialize: function () {
  4.         this.bindEvents();
  5.         this.contents={};
  6.         this.watchID=null;
  7.     },
  8.     // Bind Event Listeners
  9.     //
  10.     // Bind any events that are required on startup. Common events are:
  11.     // 'load', 'deviceready', 'offline', and 'online'.
  12.     bindEvents: function () {
  13.         document.addEventListener('deviceready', this.onDeviceReady, false);
  14.     },
  15.     // deviceready Event Handler
  16.     //
  17.     // The scope of 'this' is the event. In order to call the 'receivedEvent'
  18.     // function, we must explicitly call 'app.receivedEvent(...);'
  19.     onDeviceReady: function () {
  20.         app.receivedEvent('deviceready');
  21.         app.contents = document.getElementById('geolocation');
  22.         app.Geo();
  23.     },
  24.     onSuccess: function(position) {
  25.         app.contents.innerHTML = 'Lat : '+position.coords.latitude+', Lon : '+position.coords.longitude;        
  26.     },
  27.     onError: function(error) {
  28.         alert('code: '    + error.code    + '\n' +
  29.               'message: ' + error.message + '\n');
  30.     },
  31.     Geo: function() {
  32.         watchID = navigator.geolocation.watchPosition(app.onSuccess, app.onError, { maximumAge: 3000, timeout: 5000, enableHighAccuracy: true });        
  33.     },
  34.     // Update DOM on a Received Event
  35.     receivedEvent: function (id) {
  36.         var parentElement = document.getElementById(id);
  37.         var listeningElement = parentElement.querySelector('.listening');
  38.         var receivedElement = parentElement.querySelector('.received');
  39.  
  40.         listeningElement.setAttribute('style', 'display:none;');
  41.         receivedElement.setAttribute('style', 'display:block;');
  42.  
  43.         console.log('Received Event: ' + id);
  44.     }
  45. };



A questo punto digito i comandi
Codice sorgente - presumibilmente Plain Text

  1. cordova build



e

Codice sorgente - presumibilmente Plain Text

  1. cordova run android



Parte l'app nel mio tablet android collegato al pc ma non geolocalizza un bel niente. Come posso fare? Sto impazzendo da 3 giorni 8-|

Grazie

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 23:46
Mercoledì, 17/08/2016
Questo:

Codice sorgente - presumibilmente Plain Text

  1. alert('code: '    + error.code    + '\n' +
  2.               'message: ' + error.message + '\n');



Viene invocato?

Ci sono errori nella console di debug di Android Studio / Eclipse? E nell'output della webview? (Vedi: https://developers.google.com/web/tools/chrome-devtools/deb ...

Se aumenti il timeout che succede? E se imposti enableHighAccuracy a false?



Il mio blog: https://piero.dev
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 0:42
Giovedì, 18/08/2016
Viene invocato l'errore Timeout, alchè se aumento il timeout  a 10min e/o imposto enableHighAccuracy a false non succede nulla.

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 16:21
Giovedì, 18/08/2016
Controlla che ci sia <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> nel tuo manifest.

E prova a riavviare il dispositivo (seriamente, prova).


Il mio blog: https://piero.dev
PM Quote
Avatar
giocala88 (Normal User)
Expert


Messaggi: 248
Iscritto: 23/04/2008

Segnala al moderatore
Postato alle 11:49
Sabato, 20/08/2016
Era un problema di poermessi. Ora però sorge il problema che in Android la geolocalizzazione è lenta, parliamo di 3-4 minuti.
Soluzioni a riguardo?

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 19:19
Sabato, 20/08/2016
Dove stai testando il dispositivo? Ricordati che all'interno (a casa, in ufficio) il segnale GPS spesso non è accessibile. Se sei connesso a WiFi, e il tuo dispositivo ha abilitato i dovuti permessi, allora il WiFi viene usato per aiutare ad identificare la posizione.

Vai all'aperto e prova di nuovo. Quanto tempo ci mette?


Il mio blog: https://piero.dev
PM Quote