Add scanning
This commit is contained in:
parent
35190a2541
commit
5d2e7c8c02
@ -113,6 +113,35 @@ Per questo motivo si è scelto di utilizzare il livello LOW che permette di rile
|
||||
|
||||
### Scansione
|
||||
|
||||
Le operazioni di scansione sono meno limitate dalle funzionalità dell'API di android e per questo motivo si ha avuto maggiore libertà di scelta.
|
||||
In particolare è stato possibile settare sia l'intervallo temporale che deve intercorrere tra una scansione e la successiva, sia la durata della singola scansione.
|
||||
Si è scelto di far trascorrere un minuto tra una scansione e la prossima e di avere una scansione della durata di un secondo.
|
||||
Per quanto detto già in precedenza in base ai vari dispositivi e alle varie condizioni di funzionamento l'intervallo tra una scansione e la prossima potrebbe essere più ampio rispetto a quello stabilito.
|
||||
Entrambi i parametri sono stati settati tramite una costante in modo tale da rendere la configurazione del comportamento facilmente cambiabile.
|
||||
|
||||
Quando l'applicazione rivela un beacon nelle vicinanze esso viene trasmesso ad un'ulteriore componete applicativa tramite l'impiego del `LocalBroadcastManager` @BroadcastsOverview.
|
||||
Questa componente non consuma direttamente il beacon, ma ha il compito di smistarlo ad ulteriori componenti in base alla modalità di funzionamento dell'applicazione.
|
||||
Il codice necessario a smistare i dati di contatto è stato riportato nel listato @lst:contact-receiver.
|
||||
Come si può notare a linea 2, la prima operazione consiste nel recupero dei dati di contatto dall'`Intent`, mentre dala linea 7 si seleziona la funzione da invocare in base alla modalità di funzionamento.
|
||||
|
||||
``` {.kotlin .numberLines #lst:contact-receiver caption="Codice necessario allo smistamento dei dati di contatto."}
|
||||
// ...
|
||||
val contactData = intent?.getSerializableExtra(CONTACT_DATA_KEY)
|
||||
as ContactData?
|
||||
|
||||
val mode = getMod(context)
|
||||
|
||||
val onMode = when (mode) {
|
||||
Mode.MOD_A -> this::contactOnModeA
|
||||
Mode.MOD_B -> this::contactOnModeB
|
||||
Mode.MOD_C -> this::contactOnModeC
|
||||
}
|
||||
|
||||
onMode(context, contactData)
|
||||
```
|
||||
|
||||
Nel caso della modalità *A* il beacon viene trasmesso alla classe `NetworkReceiver` che si occupa di trasmettere il contatto al server remoto.
|
||||
Mentre nel caso delle modalità *B* e *C* il beacon viene consumato dalla classe `StoreReceiver` la quale si occupa della memorizzazione permanete del contatto all'interno di un database locale.
|
||||
|
||||
|
||||
### Stima della distanza
|
||||
|
Loading…
Reference in New Issue
Block a user