2011-02-04 10 views
8

Quindi ho chiesto qualcosa di simile ieri e ho ricevuto una risposta alla mia domanda, tuttavia non penso davvero di averlo chiesto correttamente e quindi non ho ricevuto le informazioni esatte di cui avevo bisogno .Usa Android GPS per rilevare e connettersi con altri telefoni

Sono alla ricerca di un'API, di qualche codice open source o anche solo di un modo in cui qualcun altro ha ottenuto questo su Android. Sto creando un'app che deve trovare tutti gli altri dispositivi Android entro un raggio specificato. Ad esempio, quando apri l'app Google Maps per Android e cerchi "Ristoranti [Codice postale]", utilizza un raggio modificato dal tuo codice postale e trova tutti questi luoghi. Il GPS ottiene la TUA posizione e le mappe utilizzano tali informazioni per trovare ristoranti all'interno di un indirizzo vicino a quello passato.

Invece, voglio essere in grado di utilizzare il GPS per trovare la mia posizione (come può ora facilmente), ma invece di trovare cose su una mappa (che è già integrata), voglio essere in grado di trovare altri telefoni Android abilitati per GPS. Capisco che dovranno trasmettere il loro segnale GPS allo stesso tempo (dato che non hanno i loro dati memorizzati con una sorta di database centrale come un ristorante). Tuttavia, non voglio solo TROVARE questi telefoni, voglio inviare/ricevere dati da questi telefoni (con le autorizzazioni corrette ovviamente).

Ora, ho trovato cose come l'API Bump. Tuttavia, BUMP utilizza i sensori del telefono per attivare questa ricerca. Quindi, in sostanza, se si "urta" il telefono con un altro e si esegue l'app, allora POI andrà avanti e utilizzerà il GPS per trovare la posizione dell'altro telefono su cui si è appena scontrato e scambiare i dati tra di loro. Questo è come ESATTAMENTE quello che voglio fare però nella loro API, non forniscono la funzionalità per dire semplicemente "Ehi, dammi tutti i telefoni a meno di un miglio da me."

Ho trovato anche API che possono fare esattamente ciò di cui ho bisogno, ma devono trovarsi nello stesso intervallo Bluetooth o sulla stessa rete Wi-Fi, che non si adatta a ciò di cui ho bisogno.

Sai ragazzi di tutto ciò che può adattarsi esattamente a ciò di cui ho bisogno? O forse un modo per modificare l'API di Bump (se l'hai già fatto), non dover usare i sensori del telefono e trovare le informazioni del telefono direttamente attraverso il GPS per i telefoni intorno a te? O c'è qualcosa che esiste su una rete 3g/4g invece di solo wi-fi/Bluetooth?

Grazie ragazzi.

+0

Ciao, è passato un po 'di tempo da quando hai postato questa domanda, ma ho trovato questo interessante e mi avrebbe aiutato con un progetto che sto facendo - hai trovato qualcosa di utile qui? Qualcosa come "elenca tutti i telefoni entro un miglio da questa posizione"? Grazie –

+0

@DrConfuse si prega di leggere la mia risposta – chinmish

risposta

2

Per eseguire questa operazione tramite GPS, è necessario che tutti i telefoni invii frequentemente le loro posizioni a un server di rete, che potrebbe quindi informarli degli altri vicini.

Inutile dire che questo sarebbe solo opt-in!

E potrebbe avere conseguenze negative per la durata della batteria, a meno che non si effettui l'aggiornamento di rado, che potrebbe limitare la sua usabilità.

Il vantaggio di avere un'azione di trigger esplicita su entrambi i telefoni è che devono solo interrogare il GPS e informare il server di trovarsi l'un l'altro per posizione quando sono stati entrambi attivati.

+0

In realtà voglio solo eseguire la query in un determinato momento che viene attivato da un'azione da parte dell'utente. Tuttavia, NON voglio che questa azione sia un "bernoccolo". Voglio che sia qualcosa che l'utente può fare senza nemmeno essere vicino a nessun altro. Invece di postare spesso le posizioni su un server esterno, il GPS non potrebbe realizzare altre cose che trasmettono un segnale GPS in un momento specifico e inviare/ricevere dati da essi? – slandau

+3

I ricevitori GPS sono passivi, non trasmettono nulla. Quindi, il dispositivo che vuoi trovare deve aver aggiornato un server con la sua posizione tramite la rete mobile abbastanza recentemente da essere ancora approssimativamente dove era detto, oppure entrambi i dispositivi devono essere attivati ​​allo stesso tempo per aggiornare il server e abbinarli. –

+0

Se non si trovano su una rete Wi-Fi/Bluetooth insieme corretti? Hmm, okay, quindi immagino che sia impossibile senza un server esterno che stai dicendo? – slandau

1

Probabilmente dovresti creare la tua applicazione - quindi potresti fare questo lato server e spingere le cose. Se stai cercando di inviare dati a telefoni Android casuali, sei sfortunato. La maggior parte delle persone non vorranno questo, e probabilmente non avranno le app necessarie per riceverlo e capirlo. Con la rete Bluetooth è necessaria l'autorizzazione e la maggior parte degli Androidi non è in grado di trasferire dati casuali tramite Bluetooth fuori dalla scatola (anche se è certamente possibile ottenere software per farlo).

Onestamente, il malware e il monitoraggio sono le ragioni per cui questo non è possibile, ma anche se non lo fossero, avresti comunque bisogno di un'applicazione sui dispositivi riceventi che capisca cosa stai inviando loro. E se sei abbastanza diffuso, probabilmente vorresti inviarlo a un server per diffonderlo comunque (almeno per i costi di trasmissione della banda dei telefoni).

+0

Questo è in realtà l'intero scopo. INVIO SOLO questi dati ad altri telefoni che eseguono la mia applicazione e si sono impegnati in questo processo. Potrebbero anche essere in grado di modificare le proprie impostazioni in qualsiasi momento. – slandau

+0

Quindi è necessario implementare la ricerca sul lato server. Periodicamente il telefono invierà la sua posizione al server e scoprirà se ci sono dati che lo aspettano (una volta al minuto, ogni 5 minuti, un intervallo impostato dall'utente). –

+0

Sarei in grado di utilizzare Google Latitude come server? – slandau

1

Sviluppare un'applicazione server in cui l'app Android esegue l'accesso. Invia la posizione GPS ogni volta che il telefono si sposta su una distanza attuale. Invia una richiesta di query al server per chiedere se ci sono altri telefoni nel raggio di portata, oppure chiedi al server di informare il telefono di un nuovo dispositivo nel raggio di portata.

È possibile che si verifichino problemi di scalabilità del server, quindi questo è qualcosa su cui riflettere. Inoltre, questo sarebbe un grande esaurimento della batteria, e quindi gli utenti potrebbero non essere troppo entusiasti di eseguirlo, per non parlare dell'elemento privacy.

+0

Ci piacerebbe farlo senza l'uso di un server esterno. Se vedi il mio commento qui sotto, gli utenti possono ricevere i dati solo se sono anche in esecuzione la stessa app e hanno accettato i termini e le condizioni per farlo. Inoltre, possono modificare le loro impostazioni in qualsiasi momento. – slandau

+0

Non è possibile eseguire questa operazione senza un server esterno a meno che non si utilizzi un canale di comunicazione peer-to-peer come Bluetooth, che richiede la conferma manuale per l'associazione con un dispositivo di destinazione specifico. Anche la rete wifi in genere richiede un server sotto forma di un punto di accesso (essendo possibile, ad-hoc, in alcuni casi, ma improbabile) –

+0

Sembra essere la risposta in corso. Grazie ragazzi. – slandau

1

È necessario rivedere ciò che si sta tentando di fare. I dispositivi Android non "trasmettono" alcun segnale GPS, sono semplicemente ricevitori, con segnali provenienti dai satelliti. Quindi il telefono può facilmente ottenere una posizione per sé, ma la posizione di altri dispositivi è un'informazione molto, molto privata. Per ottenere l'accesso alla posizione per altri telefoni, devi essere sulla stessa rete (bluetooth, wifi) oppure devi utilizzare un servizio basato su server per inviare postazioni, come Google Latitude.

Sarebbe altamente improbabile iscriversi a un servizio come quello. La mia posizione è molto privata, la condivido con alcune persone, ma non riesco a condividerla apertamente con un'app, senza una ragione molto, molto buona.

Mi sembra che sia necessario creare un'applicazione basata su server, ad es. su Google App Engine, chiedi alle persone di registrarsi e accetta che la loro posizione venga inviata a quel server, in modo che altri telefoni che eseguono la tua app possano accedere a tali informazioni dall'archivio centrale.

+0

Il mittente non sa nulla dei dispositivi a cui lo invia. Lui/lei non saprà mai se un altro dispositivo ottiene persino dei dati. Tutto ciò che sa è che i dati verranno inviati ad altri utenti dell'app se sono nel raggio d'azione. È tutto. E SOLO se si permettono di farlo (avere l'app aperta e accettare i dati). – slandau

+0

A meno che entrambi i dispositivi non si trovino su reti bluetooth/wifi (e anche in questo caso con limitazioni) non è possibile semplicemente "inviare" dati tra dispositivi perché sono vicini l'uno all'altro. Se desideri che i dispositivi condividano le loro posizioni, è molto probabile che sia necessario creare un'applicazione basata su server per raccogliere le posizioni e ridistribuirle (come Google Latitude). L'app server potrebbe quindi fornire dati sulla posizione ad altri utenti, quando la distanza tra tali utenti è inferiore a una determinata soglia. Ma dovrai farlo tramite un server nel cloud, non c'è modo di farlo direttamente tra i dispositivi. –

+0

Per quanto non mi piaccia quella risposta, haha, penso sia quella giusta. Grazie, Ollie. – slandau

5

Invece di pubblicare frequentemente posizioni su un server esterno, il GPS non può realizzare altre cose che trasmettono un segnale GPS in un momento specifico e inviare/ricevere dati da essi?

Le uniche cose che "trasmettono un segnale GPS" sono i satelliti.

Vorremmo realizzare questo senza l'uso di un server esterno.

Non hai altra scelta che utilizzare un server esterno, che ti piaccia o no, sia per la scoperta che per le comunicazioni successive.

Sai ragazzi di tutto ciò che può essere adattato esattamente a ciò di cui ho bisogno?

Foursquare, Google Latitude, Yahoo Fire Eagle, e così via.

+0

Grazie Commons. Sembra che questo si adatti a tutte le altre risposte. – slandau

0

Tutti i commenti di altre persone sul fatto di non essere in grado di rilevare il segnale da altri telefoni sono corretti. Esiste tuttavia un sistema alternativo completamente diverso nei servizi di localizzazione basati sulla rete. Questo è un modello in cui si chiede a una rete di carrier la posizione di un telefono, che la rete di carrier deve tracciare per il servizio avanzato 911 negli Stati Uniti (non sono consapevole di quanto ampiamente dispiegato si trova in altre aree e quanti servizi che dovresti usare per coprire altre aree).

È potenzialmente un percorso molto costoso tuttavia. E non funzionerà automaticamente solo per tutti i telefoni, credo che gli utenti dovranno scegliere di condividere la posizione con il tuo servizio. Questo è il modo in cui servizi come Loopt hanno inizialmente impostato le informazioni sulla posizione in modo che possano essere raccolti passivamente senza influire negativamente sulla durata della batteria del microtelefono. Ci sono alcuni servizi di terze parti che davanti per un servizio cross-carrier come la località Labs:

http://locationlabs.com/

così come i servizi di terze localizzazione partito come Skyhook Wireless, che potrebbe essere in grado di ottenere alcune informazioni del ordina (anche se non penso a cosa stai cercando le mappe per le loro API esistenti)

+0

Hmm, questo è decisamente interessante. Il servizio "pinging" è molto simile a quello che questa app stava per implementare. Sai dove posso trovare ulteriori informazioni su questo attributo "pinging people close-by"? – slandau

+0

Dovresti essere in grado di trovare maggiori informazioni qui: http://developer.veriplace.com/devportal/locationAccessOverview Conosco solo i servizi in generale, al di là di ciò che è probabilmente meglio contattare l'azienda e scoprire cosa offrono – mikerowehl

+0

Bene, grazie lo farò. – slandau

1

La domanda ora ha una soluzione molto semplice. Tutto quello che devi fare è configurare un Geofence e monitorarlo per l'entrata e l'uscita degli utenti. Geofence ti consente di scegliere una geolocalizzazione e impostare un cerchio del raggio desiderato attorno ad esso. Quando qualcuno entra o esce dalla posizione, puoi ricevere una notifica ed eseguire l'azione desiderata.

Visita questo link per ulteriori dettagli su come utilizzare questo in Android.

Problemi correlati