From 5d2e7c8c02620c0225094867ace287355de625a3 Mon Sep 17 00:00:00 2001 From: norangebit Date: Thu, 9 Jul 2020 15:52:43 +0200 Subject: [PATCH] Add scanning --- documentazione.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/documentazione.md b/documentazione.md index 407911e..fd0dec5 100644 --- a/documentazione.md +++ b/documentazione.md @@ -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