Italian Qualcuno ha mai provato GEOFENCE?

francesco paolo lavecchia

Member
Licensed User
Ciao a tutti,:)

sto provando Geofence l'esempio di EREL che dovrebbe servire per creare un "recinto" geografico.

Quello che promette è interessante... peccato che a me NON funziona praticamente MAI.
Dico praticamente perche' a volte funziona ma su 10 lanci al massimo ricevo la notifica 2 volte e sono sempre nelle stesso punto

geo.Id = "Test1"
geo.Center.Initialize2(lat, lon)
geo.RadiusMeters = 100
'geo.ExpirationMs = DateTime.TicksPerDay 'expire after one day
CallSubDelayed3(GeofenceService, "AddGeofence", Me, geo)
Wait For Geofence_Added (Success As Boolean)
Log("Geofence added: " & Success)

lat e lon sono quelle di casa mia (che ovviamente non inserisco :))

Forse è un problema dovuto al fatto che nell' esempio non c'e' un servizio GPS ?
Ma anche se ci fosse come faccio a "trasmettere" le coordinate al servizio GEOFENCE?

Inoltre, nel caso funzionasse bene, si possono aggiungere altri recinti?

geo.Id = "Test1"
geo.Center.Initialize2(lat, lon)
geo.RadiusMeters = 100
'geo.ExpirationMs = DateTime.TicksPerDay 'expire after one day
CallSubDelayed3(GeofenceService, "AddGeofence", Me, geo)
Wait For Geofence_Added (Success As Boolean)
Log("Geofence added: " & Success)

geo.Id = "Test2"
geo.Center.Initialize2(lat2, lon2)
geo.RadiusMeters = 100
'geo.ExpirationMs = DateTime.TicksPerDay 'expire after one day
CallSubDelayed3(GeofenceService, "AddGeofence", Me, geo)
Wait For Geofence_Added (Success As Boolean)
Log("Geofence added: " & Success)
 

LucaMs

Expert
Licensed User
Qualcuno ha mai provato GEOFENCE?

Io no, non ne ho proprio idea; però vedo questo:
CallSubDelayed3(GeofenceService, "AddGeofence", Me, geo)
Wait For Geofence_Added (Success As Boolean)
Log("Geofence added: " & Success)
CallSubDelayed lancia la routine "AddGeofence" ma solo quando la routine in corso sia stata completata. Questa cosa è in netto conflitto col Wait For successivo.
 

francesco paolo lavecchia

Member
Licensed User
boh, il log cmq stampa success a true (se commento la call success è false quindi qualcosa fa)
Quello che non capisco è da dove vengono prese le coordinate anche perche' ho messo lo smartphone in modalita' aereo e il geofence FUNZIONA LO STESSO! (vabbe' si fa per dire, in pratica non ci sono differenze con il wifi o la sim)
 

francesco paolo lavecchia

Member
Licensed User
se funzionano tutti come il primo... stiamo freschi :)
In ogni caso torno a ripetere che il geofence (quando funziona) FUNZIONA anche in modalita' aereo!
Ma come cavolo è possibile???
Da dove le prende le coordinate?
E ho appena fatto la prova di allontanarmi (sempre in modalita' aereo) da casa e la notifica non è scattata, sono tornato indietro e dopo aver girato il telefono in orizzontale e verticale per parecchie volte (ogni volta riesegue l'activity_create) e' SCATTATA LA NOTIFICA che segnalava Test1!!
 

LucaMs

Expert
Licensed User
In ogni caso torno a ripetere che il geofence (quando funziona) FUNZIONA anche in modalita' aereo!
Ma come cavolo è possibile???
Da dove le prende le coordinate?
Il GPS è attivo in modalità aereo, il resto no e sarà proprio per questo che l'esempio non ti funziona.

Io non l'ho ancora provato, sia perché prima dovrei trovare le coordinate del posto in cui mi trovo, sia perché... non ho intenzione di spostarmi :D
 

francesco paolo lavecchia

Member
Licensed User
Ah ecco, questo non lo sapevo!
Pensavo che la modalita' aereo non facesse funzionare nemmeno il GPS (non vedevo l'icona di google maps che mi sa che allora è proprio di google maps :))
Cmq se uso gps fake, quindi sposto le coordinate, e le metto in

geo.Center.Initialize2(lat, lon)

google maps si sposta a lat,lon quindi prende le coordinate dell' app fake mentre geofence no :rolleyes:
 

LucaMs

Expert
Licensed User
Credo che l'esempio di Erel consenta di creare una sola zona-recinzione.

Se chiedo mi sa che s'incazza :p.

Manca anche un modo per disattivare la zona (i rilevamenti di entrata e uscita - e pare che esista anche un modo per rilevare la permanenza in una zona).
Proprio questo mi ha fatto pensare, guardando il sorgente, che con quell'esempio si possa impostare un'unica zona.
 

francesco paolo lavecchia

Member
Licensed User
No no, ho fatto appena la prova di inserire 3 punti distanti 200 mt l'uno dall' altro e in effetti funzionano (devo girare il telefono 200 volte ma prima o poi la notifica scatta). Il problema è: perche' non scatta quando entri nel recinto? Se volessi fare una app mica posso costringere l'utente a girare il telefono 200 volte. :D
Visto che parli inglese MOLTO meglio di me (ho letto quello che gli hai scritto poco fa) gli potresti chiedere per quale motivo non scatta? In debug ho visto (con un breakpoint) che entra spesso nella sub Service_Start quindi teoricamente di potrebbero prendere lat e lon

upload_2019-5-1_16-48-10.png


dico teoricamente perche' NON RIESCO (sono un capra lo so) ad estrarre mLatitude e mLongitude

Con quei valori (stampandoli sull'activity) si puo' verificare se effettivamente sto geofence funziona oppure ha bisogno di ERELrevisione :D
 

LucaMs

Expert
Licensed User

francesco paolo lavecchia

Member
Licensed User
Questo non può accadere; questa routine parte solo all'avvio dell'app. Non è che la chiudi e riapri?

Non so, quando si ferma sul breakpoint clicco su F5 e si ferma ancora li (forse solo in debug)
 

francesco paolo lavecchia

Member
Licensed User
Nell'esempio, quando entri o esci dalla zona ti viene inviata una notifica.
(Io sto usando il rosso per non confondere la risposta.Come si fa replicare come fai tu?)

Teoricamente si, peccato che (come ho detto all' inizio) funziona 2 volte su 10


 

LucaMs

Expert
Licensed User
Nelle routine Geofence_Enter e Geofence_Exit del servizio Starter, metti del codice simile a questo:

B4X:
' Nella Geofence_Enter
CallSubDelayed2(Main, "Entrato", "Exit " & Id)

B4X:
' Nella Main:

Sub Entrato(msg As String)
    ' qui una edittext, come etEntrato.Text = msg
End Sub
Simile per la Exit.

Comunque dovrebbe arrivarti una notifica.
 

LucaMs

Expert
Licensed User
Nell'esempio, quando entri o esci dalla zona ti viene inviata una notifica.
(Io sto usando il rosso per non confondere la risposta.Come si fa replicare come fai tu?)

Teoricamente si, peccato che (come ho detto all' inizio) funziona 2 volte su 10
Se hai messo un raggio piuttosto piccolo e magari sei pure al chiuso, non ti funzionerà, il GPS non fa miracoli; imposta un raggio di almeno 100m.
 

francesco paolo lavecchia

Member
Licensed User
Quando avrai voglia di camminare :D ti renderai conto anche tu che, a meno che non sia un problema del mio smartphone, NON FUNZIONA :(
Nelle routine Geofence_Enter e Geofence_Exit c'e' un ToastMessageShow quindi quando entra li dovrebbe comparire un messaggio... (2 volte su 10)
 
Top