5

Stavo cercando di implementare il programma di scansione beacon e voglio che i servizi di Android BLE si comportino in modo simile al metodo iOS "didRangeBeacons", vale a dire che dovrebbe essere chiamato ogni secondo. Ma in Android non esiste un tale metodo. Ma in Android esiste il metodo "leScanCallback" che viene chiamato molto frequentemente con un periodo di scansione di meno di un secondo. Quindi c'è un modo per implementare la mia funzionalità nel metodo leScanCallback e aumentare il suo intervallo di scansione a 1 secondo, in modo che si comporti in modo simile al metodo "didRangeBeacons" di iOS.Come aumentare il periodo di scansione per i dispositivi BLE in Android?

* Sarà anche la cattiva programmazione a scansionare continuamente il beacon e ad aumentare il suo intervallo di scansione in Android?

Grazie in anticipo

risposta

8

E 'importante capire che non v'è alcun supporto nativo IBeacon in Android. Il metodo Android leScanCallback non è affatto equivalente al metodo iOS didRangeBeacons.

Il metodo leScanCallback consente semplicemente di richiamare ogni volta che viene visualizzato un pacchetto pubblicitario da un dispositivo Bluetooth (i dispositivi con il bit collegabile impostato nell'annuncio vengono richiamati solo la prima volta che viene visualizzato l'indirizzo Mac finché non si interrompe e riavviare la scansione). A meno che non si interrompa e si riavvii la scansione su un timer, non vi è alcun periodo di scansione e si ottengono richiamate all'arrivo dei pacchetti. Questo può essere molte volte al secondo.

Durante la scrittura dell'open source Android iBeacon Library, ho dovuto creare tutte le funzionalità da zero per creare una richiamata didRangeBeaconsInRegion equivalente a quella di iOS. Per fare ciò, la libreria si arresta e riavvia la scansione circa una volta al secondo e memorizza l'elenco di tutti iBeacons visualizzati nel ciclo, chiamando solo il callback con l'elenco di iBeacons visibili alla fine del ciclo. Ci sono molte altre complessità non discusse qui.

The code is free per voi per rivedere e modificare, quindi vi incoraggio a farlo se si desidera eseguire il proprio.

+0

Grazie David. Stavo rivedendo il codice scritto da te. È davvero un bel lavoro. E ora ho la logica dietro la scansione. :) – HeadOnn

+0

Se si desidera eseguire la scansione solo quando l'applicazione è in primo piano e non in background. Cosa sarà meglio? Scansione continua o scansione in un intervallo (di 1 sec.) –

+1

È necessario eseguire la scansione a intervalli. Molti dispositivi Android hanno un livello hardware bluetooth che fornisce solo un singolo callback di rilevamento per dispositivo hardware rilevato per scansione. L'arresto e il riavvio sono necessari per ottenere una seconda richiamata per lo stesso dispositivo hardware. – davidgyoung

Problemi correlati