Bluetooth

24 settembre 2014

Auricolari, tastiere, mouse. Ma anche modem, navigatori e vivavoce. Il termine Bluetooth richiama alla mente una serie di dispositivi diffusissimi nel quotidiano dell’utente. In generale, stiamo parlando di un protocollo per la comunicazione wireless a brevi distanze, solitamente operante nel raggio di alcuni metri. Gli smartphone attuali lo integrano nella maggior parte dei casi e non potrebbe essere diversamente date le potenzialità di interazione a livello elettronico che offre.

Inoltre se da un lato molti dispositivi che fino a pochi anni fa venivano utilizzati in Bluetooth sono ormai stati assorbiti – a livello di funzionalità – dagli smartphone (si pensi al navigatore satellitare) l’attuale mercato della microelettronica offre nuovi strumenti altamente configurabili per i quali questa via di comunicazione appare uno scenario efficiente e produttivo. In questa categoria rientra la famosissima scheda programmabile Arduino o il microcomputer Raspberry Pi. Possono essere impiegati in soluzioni utili in ambienti domestici, lavorativi o industriali ed un’app Android sarebbe la soluzione ideale per attuarne il controllo.

Sono quindi tanti i motivi per affrontare l’integrazione di Bluetooth nelle API Android ed il presente capitolo mostra una panoramica dei principali concetti utili per mettersi in marcia.

Discovery dei dispositivi

La prima fase, solitamente necessaria, per lavorare con Bluettoth è la ricerca (anche denominata discovery, scoperta) di dispositivi disponibili nei paraggi. L’esempio che stiamo per mostrare si occupa proprio di questo. Cercherà eventuali controparti nei paraggi e ne mostrerà i nomi in una ListView.

Per fare ciò è necessario innanzitutto che:

  • il nostro dispositivo Android disponga del supporto Bluetooth;
  • nell’AndroidManifest della nostra applicazione siano predisposte le necessarie permission:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>

Oltre che essere disponibile nel dispositivo, il Bluetooth dovrebbe essere attivato. Ciò non è stato richiesto tra i prerequisiti visto che nell’esempio seguente impareremo ad affrontare anche questa situazione.

Il layout dell’app è molto semplice, contiene solo un pulsante per attivare la ricerca ed una ListView per mostrarne i risultati.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Cerca dispositivi" 
        android:onClick="scan"/>
    
    <ListView android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listview"/>

</LinearLayout>

All’interno dell’Activity Java ci occuperemo, come presumibile, di istanziare tutti gli oggetti necessari al funzionamento del layout, in primis Adapter e ListView, ma soprattutto di approntare il necessario all’utilizzo di Bluetooth.

La classe prioritaria per l’integrazione è ancora una volta uno specifico Adapter: BluetoothAdapter. Sarà lui, una volta che il supporto per il protocollo sarà correttamente attivato, a cercare “in giro” eventuali dispositivi con cui comunicare.

L’impostazione dell’Activity è la seguente:

public class MainActivity extends Activity 
{
	private BluetoothAdapter btAdapter;
	private Set dispositivi;
	private ListView lv;
	private ArrayAdapter adapter = null;
	private static final int BLUETOOTH_ON=1000;
	. . .
	. . .
}

La costante intera BLUETOOTH_ON servirà solo come codice di richiesta nell’uso dell’Intent. Nelle righe precedenti si vede anche un’altra classe legata al mondo Bluetooth ed è BluetoothDevice. Il Set di oggetti di questo tipo conterrà i riferimenti dei dispositivi individuati nelle vicinanze.

Il metodo onCreate predispone le configurazioni iniziali:

	@Override
	protected void onCreate(Bundle savedInstanceState) 
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btAdapter = BluetoothAdapter.getDefaultAdapter();
		lv = (ListView)findViewById(R.id.listview);
		adapter=new 			ArrayAdapter(this,android.R.layout.simple_list_item_1);
		lv.setAdapter(adapter);
	}

mentre il metodo scan serve a gestire il click sul pulsante:

	public void scan(View v)
	{
		if (!btAdapter.isEnabled())
		{
			Intent turnOn = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
			startActivityForResult(turnOn, BLUETOOTH_ON);
		}
		else
			load();
	}

Qui iniziamo ad entrare nel vivo delle funzionalità. Infatti, come detto in precedenza, il supporto Bluetooth nel dispositivo Android deve essere presente ed attivato. Il metodo isEnabled cercherà di verificare proprio questo ed in caso di esito negativo lancerà l’Intent che chiederà all’utente il permesso di farlo (vedere in figura).

La finestra di dialogo sarà proprio il risultato dell’Intent lanciato. Visto che si è usato il metodo startActivityForResult, il risultato verrà consegnato nel metodo onActivityResult di cui faremo l’override:

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) 
	{
		super.onActivityResult(requestCode, resultCode, data);
		if (requestCode==BLUETOOTH_ON && resultCode==RESULT_OK)
		{
			load();
		}
	}

Come si può vedere per essere sicuri che l’utente ha accettato l’attivazione del Bluetooth è necessario che il codice di richiesta sia pari a BLUETOOTH_ON ed il codice di ritorno a RESULT_OK, una costante definita all’interno della classe Activity.

Infine il metodo load, più volte invocato, contiene il codice necessario per reperire i dispositivi ed inserirne i nomi all’interno dell’adapter:

	private void load()
	{
		dispositivi = btAdapter.getBondedDevices();
		adapter.clear();
		for(BluetoothDevice bt : dispositivi)
	         adapter.add(bt.getName());
	}

La figura seguente mostra i nomi dei dispositivi trovati. Nel caso dell’esempio è stato individuata una sola interfaccia Bluetooth con cui comunicare il cui nome è ospite-pc-0.

Tutte le lezioni

1 ... 43 44 45 ... 84

NFC

NFC

1 ... 43 44 45 ... 84

Se vuoi aggiornamenti su Bluetooth inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Bluetooth

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy