2013-07-23 11 views
10

Non sono uno specialista Bluetooth e mi chiedo quali sono le possibilità di trovare automaticamente i dispositivi Bluetooth già accoppiati quando sono a portata reciproca.Trova dispositivi bluetooth già accoppiati automaticamente, quando sono nel raggio d'azione

Sfondo: Nel nostro caso un'applicazione Android deve connettersi a un accessorio dedicato tramite Bluetooth (Rfcomm). Entrambi i dispositivi sono noti l'uno all'altro (sono accoppiati). L'applicazione Android registra un ricevitore broadcast. Durante l'avvio dell'applicazione, l'app avvia una scoperta per trovare l'accessorio dedicato. Se l'accessorio è nel raggio d'azione, tutto funziona alla grande.

Problema: L'utente avvia l'applicazione al di fuori del campo dell'accessorio dedicato. L'applicazione Android tenta di scoprire l'accessorio senza successo. Quindi l'utente entra nella gamma dell'accessorio Bluetooth. Il ricevitore della trasmissione non riceverà notifiche sull'accessorio che è nel raggio d'azione adesso.

simili Discussione/Possibili soluzioni domande simili sono stati già chiesto in StackOverflow (ad esempio autoconnect to bluetooth device when in range). Ma cercare continuamente di scoprire i dispositivi Bluetooth nel raggio d'azione non è quello che sto cercando perché ciò causerebbe un eccessivo consumo della batteria del dispositivo Android.

Un'altra soluzione potrebbe essere quella di provare a connettersi al dispositivo associato nel metodo onResume dell'attività. Funzionerebbe ma ha lo svantaggio che l'applicazione non può essere eseguita in background. Quindi l'utente doveva portare l'applicazione almeno una volta in primo piano per avviare la connessione.

Una terza idea a cui ho pensato è di implementare anche un socket server nell'applicazione Android. Quando viene avviata l'applicazione Android e la scoperta è terminata senza successo, l'applicazione Android potrebbe creare socket del server e ascoltare le notifiche in arrivo dell'accessorio. Ciò potrebbe aiutare in alcuni scenari (ad esempio, l'utente avvia la sua applicazione, si avvicina all'accessorio, attiva l'accessorio e l'accessorio notifica all'avvio che l'applicazione è nel raggio d'azione). Ma questa non è ancora una soluzione al 100% perché entrambi i dispositivi possono iniziare al di fuori dell'intervallo tra loro. Inoltre sarebbe obbligatorio implementare funzionalità aggiuntive (socket del server Bluetooth nel dispositivo Android ...).

Quindi mi chiedo se esistono soluzioni migliori. Sto cercando una soluzione in cui non sono richiesti ServerSocket aggiuntivi e ottengo sempre la notifica che i due dispositivi già accoppiati sono nel raggio di variazione :-)

Grazie per qualsiasi aiuto!

+0

Vorrei passare alla seconda soluzione in cui il telefono tenta di connettere l'accessorio senza cercare lo stesso, fare l'esempio di telefono e auricolare, se connesso e 1 si spegne intervallo, normalmente le cuffie cercano di connettersi a dispositivi precedentemente accoppiati per un determinato periodo di tempo (a seconda dell'implementazione della cuffia). – ashish

+0

Ehi! Grazie per la tua risposta. Lo svantaggio della seconda soluzione è che questo deve essere attivato in qualche modo (ad esempio onResume). Nel caso di onResume l'utente deve portare l'app in primo piano. Sto cercando la possibilità di farlo automaticamente al momento giusto per renderlo facile per l'utente :-) – mheymel

+0

Non è possibile avere un servizio in esecuzione in background che si occuperà della connessione/ricerca del dispositivo bluetooth – ashish

risposta

0

Non è una soluzione completa, ma forse è sufficiente che l'app esegua il polling della presenza dell'accompagno ogni volta che lo schermo viene acceso? In tal caso, ciò potrebbe essere utile: Start Activity on wake up/sleep in Android

+0

Hey. Grazie per la tua risposta! Anche questa è una buona soluzione (meglio della soluzione "onResume"). Ma hai ragione, ancora non la soluzione al 100%. Dopo aver dato un'occhiata a ACL e ai messaggi di basso livello, sembra che sia il modo migliore di utilizzare la soluzione 3, visto che stiamo avendo il comfort di un accessorio dedicato. [Link] (http://stackoverflow.com/questions/9537833/what-triggers-the-bluetoothdevice-action-acl-broadcasts) – mheymel

Problemi correlati