Android Studio - Connettività (WI-FI, Bluetooth e altro)

Android Studio - Connettività (WI-FI, Bluetooth e altro)

Come facciamo a comunicare tra APP.

Le App tra loro comunicano con le Intent, Intent implicite, sappiamo che possiamo comunicare in modo indiretto, con O.S. Android che fa da postino.

O.S. Android si occupa tra lo scambio di info, tra le App che si trovano sullo stesso Device.

Le API di O.S. Android, consentono ai dispositivi di connettersi mediante Bluetooth

Wi-Fi, NFC, P2P, USB, SIP*

CONNESSIONI WIRELESS

Ci sono diversi protocolli. Wireless, comunicazioni di reti.

CON QUESTI SERVIZI: si può connettere, scambiare file

BLUETOOTH

Il framework con le Librerie. Ci permettono di scansionare

E’ una delle tecnologie utilizzate attualmente

permette di scansionare i dispositivi BT

interrogare l’adapter BT locale. (ci sono dispositivi con cui ho già stabilito una connessione)

stabilire i canali di comunicazione RFCOMM

trasferire dati da dispositivi accoppiati

gestire connessioni multiple

BT (Bluetooth) Classico.

Scelta giusta per operazioni che richiedono molto consumo della batteria

BT Low Energy per il basso consumo

LE FASI PER UTILIZZARE IL BLUETOOTH:

setup

ricerca dei dispositivi accoppiati e non, nell’area locale

connessione

trasferimento dati tra dispostivi

Stabilire la connessione, tramite il nome della connessione e il DEVICE.

API

android.bluetooth

(sono già all’interno di Android, non dobbiamo importare nulla)

BluetoothHealth è l’API principale

STABILIRE CONNESSIONI? E’ bene chiedere dei permessi.

<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>

Per abilitare il BLUETOOTH, abilitare il permesso. La nostra APP vuole stabilire una connessione Bluetooth, e deve essere abilitata dall’utente.

Per un Servizio: DISCOVERY → BLUETOOTH_ADMIN

<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>

Alcune APP chiedono questo permesso, per conoscere i dispositivi presenti, Localmente.

Chi c’è intorno, implementando questo Servizio di Discovery

SETUP

*****

Ci chiede di verificare se il dispositivo è abilitato per il Bluetooth

Bisogna richiedere all’Utente di Abilitare il BLUETOOTH.

Si utilizza il BluetoothAdapater. C’è un SOLO: BLUETOOTH per tutto il SISTEMA.

restituisce Null, se il BLUETOOTH non è supportato.

BluetoothAdapter bluE = BluetoothAdapter.getDefaultAdapter();
if
(bluE == null)
{

}

Vediamo se il BLUETOOTH è disponibile e se non è Utilizzato da un’altra APP.

Ci si assicura che il BLUETOOTH sia Abilitato chiamano isEnabled()

if (!bluE.isEnabled())
{

}

if (!bluE.isEnabled())
{
Intent enabl = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
}

Se l’utente Risponde, positivamente. E’ sempre l’UTENTE che RISPONDE POSITIVAMENTE.

L’INTENT apre il Gestore delle CONNESSIONI.

E’ un INTENT IMPLICITO.

O.S. Android, ci mette in comunicazione con il GESTORE.

Se l’UTENTE risponde POSITIVAMENTE AI PERMESSI. Il Risultato sarà RESULT_OK

Dall’ onActivityResult(), avremo → RESULT_OK. RESULT_OK è un RESULT CODE

Ricevuto questo RESULT_OK, è possibile iniziare a scansionare i DISPOSITIVI.

Tutto questo è IL: SETUP con ABILITAZIONE DATA

Se invece come OUTPUT: ci ARRIVA dall’INTENT: RESULT_CANCELED, vuol dire che non abbiamo l’autorizzazione.

E’ bene prevedere una Fase, in cui vengono disabilitate le funzionalità che Noi volevano Lanciare.

Perchè l’UTENTE ha chiesto una cosa e poi non mi deve dare, l’AUTORIZZAZIONE?

E’ bene dare una spiegazione, sul perché Stiamo facendo un’operazione.

E’ bene farlo con un Pannello, accennando: per fare la connessione, ho bisogno che venga collegato il BLUETOOTH

E’ bene fare TIPO: un IF con il PANNELLO.

COME SI MONITORA IL BLUETOOTH?

Abbiamo un LISTENER, si mette in ascolto. Si crea un INTENT, un INTENT BROADCAST

INTENT BROADCAST: servono per gestire le comunicazioni, le connessioni.

Quindi per monitorare BLUETOOTH durante il Running dell’APP si crea un Listener di tipo INTENT BROADCAST “ACTION_STATE_CHANGED”.

Questo BROADCAST, contiene dei CAMPI, dei CAMPI di STATI che possono essere MONITORATI.

MONITORARE QUESTI CAMPI DI STATI: porta a capire a che stato si trova la Comunicazione in quel momento.

RICERCA DISPOSITIVI VICINI

Dopo aver fatto il SETUP, chiesto i Permessi e attendendo che l’UTENTE ci abbia dato il codice di ABILITAZIONE.

abbiamo aperto il PROTOCOLLO Bluetooth che inizia a far la scansione, cioè a inviare delle onde vicine

CON BLUETOOTH ADAPTER, abbiamo la SCAN dell’AREA LOCALE. Ci sono intorno Dispositivi, con cui è possibile (SE LORO VOGLIONO), stabilire una connessione.

AL PROTOCOLLO del BLUETOOTH, interessa il MAC ADDRESS.

MAC ADDRESS: codice univoco associato all’HARDWARE della scheda di Rete.

IL PROTOCOLLO si basa sul MAC ADDRESS.

Dopo aver connesso il dispositivo la prima volta, all’utente è presentata una richiesta di ABBINAMENTO.

Dopo l’Abbinamento, i dati dei dispositivi sono memorizzati e possono essere usati dalle API BT.

C’è differenza tra essere ABBINATI ed ESSERE CONNESSIONI

Ho il MAC ADDRESS del DISPOSITIVO (BLUETOOTH) e quindi possono aprire una comunicazione RADIO-FREQUENZA (RF COMM). E’ un protocollo.

Lanciare segnali attraverso sensori di Radio Frequenza.

Aperto il CANALE? SI. C’è lo scambio dei dati.

RICERCA DISPOSIVITI

Il metodo: startDiscovery() fa partire la ricerca.

E’ un processo Asincrono (Lancia un THREAD), che restituisce TRUE non appena il servizio è partito.

Lo Scan prevede una richiesta di 12 secondi. Si mette in ascolto per 12 secondi.

Per ricevere le info dei DISPOSITIVI l’APP deve registrare un BROADCASTRECEIVER per l’INTENT: ACTION FOUND

L’INTENT contiene questi 2 attributi: EXTRA_DEVICE e EXTRA_CLASS, contenenti un BluetoothDevice e una BluetoothClass

ABILITARE LA VISIBILITA’

per rendere visibile il dispositivo:

startActivityForResult(Intent, ACTION_REQUEST_DISCOVERABLE);

Visibilità: è di 2 minuti di DEFAULT.

Inoltre:

Intent connB = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
connB.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(connB);

Se mettessimo:

Intent connB = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
connB.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
startActivity(connB);

con Lo zero è sempre visibile.

*****

Per creare una connessione tra 2 dispositivi bisogna implementare il meccanismo Server-Side e Client-Side

I dispositivi sono connessi se hanno un BLUETOOTHSOCKET, sullo stesso canale RFCOMM.

Il SOCKET: una presa, una connessione in cui si infila lo spinotto nella presa e c’è lo scambio di dati (per farla breve).

Client e Server ottengono la BluetoothSocket in diversi modi:

il server lo riceve quando è accettata una connessione entrante

il client lo riceve quando apre un canale RFCOMM verso il Server-S

BLUETOOTH SOCKET

Una tecnica per ottenerlo è preparare ciascun DISPOSITIVO per FUNGERE da Server.

Entrambi si abilitano tutti e due come Server.

Appena uno dei due inizia la comunicazione, diventerà Client.

La connessione come CLIENT:

Se i dispositivi non erano abbinati il FRAMEWORK mostrerà un messaggio all’utente per la connessione

fa parte di uno dei DISPOSITIVI cercati con il BROADCAST INTENT

About Post Author

pasquale.clarizio

error: Content is protected !!
Advertisment ad adsense adlogger