Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf ·...

15
Curso de Android 2012/13 Conectividad Bluetooth Desarrollo de Aplicaciones Android UCLM 2012/13

Transcript of Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf ·...

Page 1: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Curso de Android 2012/13 Conectividad Bluetooth

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 2: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Bluetooth es una tecnología standard abierta, global wireless para intercambio de datos sobre distancias cortas entre aparatos fijos y móviles, creado areas de redes personales (PANs), con altos niveles de seguridad. EL marco de aplicaciones de Android provee acceso a la funcionalidad Bluetooth a través de la Android Bluetooth API 4 tareas principales para comunicarse usando Bluetooths • La configuración de Bluetooth • Encontrar aparatos que estén o bien ya apareados o que se encuentre

dentro del area local • Conectar aparatos • Transferir datos entre aparatos

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 3: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Clases e interfaces necesarias (I) BluetoothAdapter (radio bluetooth) -Descubrimiento de otros aparatos BT -Consulta a la lista de aparatos ligados - Instanciar un BluetoothDevice usando una dirección MAC conocida - Crear un BluetoothServerSocket para escuchar las conversaciones de otros equipos BluetoothDevice Es el equipo remoto con BT. Esta clase se usa para pedir conexión con un equipo remoto a través de la interfaz BluetoothSocket BluetoothSocket Punto de conexión para intercambiar datos con otros equipos BT usando InputStream y OutputStream. Es la interfaz de un socket BT. La devuelve el BluetoothServerSocket ante un pedido de conexión cuando la conexión es aceptada BluetoothServerSocket Representa un servidor socket abierto para pedidos entrantes. Al comenzar una conexión un aparato debe abrir un servidor socket

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 4: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características y capacidades del equipo BT BluetoothProfile: Interfaz que especifica el perfil de la aplicación (Android 3.0) - Auriculares (BluetoothHeadset) Provee soporte para auriculares para móviles junto con Hands-Free - A2DP (Advanced Audio Distribution Profile- BluetoothA2dp) Define como audio de alta calidad puede ser transmitido entre equipos BT - Equipos de salud (BluetootHealth a partir de Android 4) Para crer aplicaciones que se comunican con equipamiento de salud que utilicen BT (monitores de frecencia cardíaca, medidores de tension arterial, etc) BluetoothHeathCallback , BluetoothHealthAppConfiguration - Manos libres (Hands-Free) BluetoothProfile.ServiceListener Interfaz que notifica cuando un cliente ha sido conectado o desconectado de un servicio con un determinado perfil.

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 5: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Permisos Bluetooth BLUETOOTH: Necesario para realizar cualquier comunicación BT (pedir o aceptar conexiones, enviar datos) BLUETOOTH_ADMIN: Necesario para descubrimiento de equipos o configurar BT Para aplicaciones que necesiten descubrir y conectar equipos BT Se declaran en el Manifiesto <manifest ... > <uses-permission android:name="android.permission.BLUETOOTH" /> ... </manifest>

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 6: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

Pasos para la conectividad 1)Obtener el adaptador Bluetooth (sellama al método estático getDefaultAdapter()) BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();

2) Habilitar el adaptador (llamando a startActivityForResult con el intent ACTION_REQUEST_ENABLE) if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } D

esar

rollo

de

Ap

licac

ion

es A

nd

roid

U

CLM

20

12

/13

Page 7: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

3) Descubrimiento de equipos

Búsqueda en el area local de equipos que tengan BT habilitado Se usa el BluetoothAdapter Una vez descubierto se intercambian el nombre, tipo, y la dirección MAC única Se elige si comunicarse o no Una vez comunicado por primera vez se hace una peticion de vinculación. Una vez vinculados las conexiones siguientes se hacen sin necesidad de descubrimiento. Estar vinculados no significa estar conectados Estar conectados significa compartir un canal RFCOMM. El API de Android requiere estar vinculados antes de generar el canal RFCOMM

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 8: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

3) Descubrimiento de equipos

Primero se buscan los aparatos vinculados llamando a getBondedDevices Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices(); // si hay aparatos vinculados if (pairedDevices.size() > 0) { // Loop a través de los aparatos vinculados for (BluetoothDevice device : pairedDevices) { //Agrega el nombre y dirección a un array adapter para mostrarlos en una ListView mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); } }

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 9: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

3) Descubrimiento de equipos

Luego comienza el descubrimiento de servicios llamando al método startDiscovery() La aplicación debe registrar un BroadcastReceiver para el intent ACTION_FOUND // Crear un BroadcastReceiver para ACTION_FOUND private final BroadcastReceiver mReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); // cuando se encuentra un aparato if (BluetoothDevice.ACTION_FOUND.equals(action)) { // obtiene el objeto BluetoothDevice desde el intent BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); // Agrega el nombre y dirección a un array adapter para mostrarlos en una ListView mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); } } }; // Registra el BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(mReceiver, filter);

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 10: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

3) Descubrimiento de equipos

Si se quiere hacer visible el dispositivo propio a otros equipos hay que llamar a startActivity con el intent ACTION_REQUEST_DISCOVERABLE Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); startActivity(discoverableIntent);

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 11: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

4) Conectando equipos

Implementar mecanismos de ambos lados (clientes y servidor) Un equipo abre un server socket y el otro , usando la dirección MAC del server inicia la conexión.

Servidor: a) Crea unBluetoothServerSocket llamando al listenUsingRFcommWithServiceRecord(String,UUID) b)Comienza a escuchar llamando al método accept() Es bloqueante, hasta una excepción o hasta que el aparato remoto mande un pedido de conexión con la UUID correspondiente. En este caso el metodo accept() devuelve BluetoothSocket c) Si no se aceptan mas conexiones invocar al método close() D

esar

rollo

de

Ap

licac

ion

es A

nd

roid

U

CLM

20

12

/13

Page 12: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

4) Conectando equipos

Implementar mecanismos de ambos lados (clientes y servidor) Un equipo abre un server socket y el otro , usando la dirección MAC del server inicia la conexión.

Cliente a) Crea unBluetoothSocket llamando al createRFcommWithServiceRecord(UUID) b)Inicia la conexión llamando al método connect() Connect chequea el UUID, si coincide con el del serversocket y el remoto acepta la comunicación, comparten entonces el canal Rfcomm. Es bloqueante, se realiza con un thread separado del thread principal.

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 13: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

5) Gestionando la conexión

Una vez conectados comienza el envío de datos 1) Se hace usando las clases InputStream y OutputStream que manejan la transmisión a través del Socket. Para obtener y enviar datos se invocan a los métodos getInputStream() Y getOutputStream. 2) Se leeen y se escriben datos en los streams usando read(byte[]) y write(byte[]) respectivamente Y eso es todo básicamente…

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 14: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

EJEMPLO

CHAT CON BLUETOOTH Permisos declarados en el Manifiesto Dos actividades declaradas en el Manifiesto: DeviceListActivity (Abre cuadro de diálogo) BluetoothChat (Inicia la aplicación)

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3

Page 15: Curso de Android 2013 - ARCO Researcharco.esi.uclm.es/public/cep.android/12-13/dia3/BT.pdf · Clases e interfaces necesarias (II) BluetoothClass (solo lectura) Describe las características

EJEMPLO

CHAT CON BLUETOOTH Tres archivos .java (dos actividades y una clase) • BluetoothChat.java: Archivo principal, despliega el chat • DeviceListActivity.java: Actividad que aparece como un

diálogo. Muestra una lista de los aparatos vinculados y los descubiertos

• BluetoothChatService.java: Clase que configura y gestiona las comunicaciones con otros equipos. Tres threads: Uno que escucha, otro para conectar, Otro para enviar datos

Des

arro

llo d

e A

plic

acio

nes

An

dro

id

UC

LM 2

01

2/1

3