You are on page 1of 9

Bluetooth

La plataforma Android incluye soporte para la pila de red Bluetooth, que permite a
un dispositivo para el intercambio de datos de forma inalmbrica con otros
dispositivos Bluetooth. El marco de aplicacin proporciona acceso a la
funcionalidad Bluetooth a travs de las API de Bluetooth de Android. Estas API
permiten aplicaciones se conectan de forma inalmbrica a otros dispositivos
Bluetooth, de punto a punto que permite y multipunto funciones inalmbricas.

El uso de las API de Bluetooth, una aplicacin para Android puede realizar lo
siguiente:

Analizar en busca de otros dispositivos Bluetooth
Consultar el adaptador Bluetooth local para los dispositivos con Bluetooth
emparejados
Establecer canales RFCOMM
Conectarse a otros dispositivos a travs de descubrimiento de servicios
Transferencia de datos hacia y desde otros dispositivos
Gestin de mltiples conexiones

Este documento describe cmo utilizar Bluetooth Classic . Bluetooth Classic es la
opcin correcta para ms operaciones de mayor consumo como el streaming y la
comunicacin entre los dispositivos Android. Para los dispositivos Bluetooth con
los requisitos de baja potencia, Android (Nivel 18) API 4.3 introduce soporte API
para Bluetooth Low Energy. Para obtener ms informacin, consulte Bluetooth
Low Energy .

Los fundamentos

En este documento se describe cmo utilizar las API de Bluetooth de Android para
realizar las cuatro tareas principales necesarias para comunicarse a travs de
Bluetooth: la configuracin de Bluetooth, la bsqueda de dispositivos que, o bien
estn vinculados o disponibles en el rea local, los dispositivos de conexin y
transferencia de datos entre dispositivos.
Bluetooth Adapter
Representa el adaptador Bluetooth local (radio Bluetooth). El Bluetooth Adapter es
el punto de entrada para todas las interacciones Bluetooth. El uso de este, se puede
descubrir otros dispositivos Bluetooth, consultar una lista de los (pares de) los
dispositivos de servidumbre, una instancia de unBluetoothDevice mediante una
direccin MAC conocida, y crear un BluetoothServerSocket para escuchar las
comunicaciones de otros dispositivos.
Bluetooth Device
Representa un dispositivo Bluetooth remoto. Utilice esta opcin para solicitar una
conexin con un dispositivo remoto a travs de un BluetoothSocket o informacin
de consulta acerca del dispositivo, tales como su nombre, direccin, clase y estado de
enlace.
BluetoothSocket
Representa la interfaz para un socket de Bluetooth (similar a una red
TCP zcalo ). Este es el punto de conexin que permite a una aplicacin intercambiar
datos con otro dispositivo Bluetooth a travs de InputStream y OutputStream.
BluetoothServerSocket
Representa un socket de servidor abierta que escucha las peticiones de entrada
(similar a una red TCPServerSocket ). Con el fin de conectar dos dispositivos
Android, un dispositivo debe abrir un socket de servidor con esta clase. Cuando un
dispositivo Bluetooth remoto realiza una solicitud de conexin al este dispositivo,
el BluetoothServerSocket devolver una conectada BluetoothSocket cuando se
acepta la conexin.
BluetoothClass
Describe las caractersticas generales y capacidades de un dispositivo Bluetooth. Esta
es una de slo lectura un conjunto de propiedades que definen mayores y menores
clases de dispositivo del dispositivo y los servicios. Sin embargo, esto no describe de
forma fiable todos los perfiles y servicios compatibles con el dispositivo Bluetooth, pero
es til como una sugerencia para el tipo de dispositivo.
BluetoothProfile
Una interfaz que representa un perfil Bluetooth. Un perfil Bluetooth es una
especificacin de interfaz inalmbrica para la comunicacin basada en Bluetooth entre
dispositivos. Un ejemplo es el perfil de manos libres. Para mayor discusin de los
perfiles, consulte Funcionamiento con perfiles
BluetoothHeadset
Proporciona soporte para auriculares Bluetooth que se utilizarn con los telfonos
mviles. Esto incluye tanto el auricular Bluetooth y (v1.5) perfiles de manos libres.
BluetoothA2dp
Define la alta calidad de audio se puede transmitir de un dispositivo a otro a travs de
una conexin Bluetooth. "A2DP" significa Advanced Audio Distribution Profile.
BluetoothHealth
Representa un perfil Device Salud proxy que controla el servicio Bluetooth.
BluetoothHealthCallback
Una clase abstracta que se utiliza para aplicar BluetoothHealth devoluciones de
llamada. Usted debe extender esta clase y poner en prctica los mtodos de
devolucin de llamada para recibir actualizaciones sobre cambios en el estado de
registro de la aplicacin y del estado del canal Bluetooth.
BluetoothHealthAppConfiguration
Representa una configuracin de la aplicacin que la aplicacin de terceros Salud
Bluetooth registra para comunicarse con un dispositivo Bluetooth remoto de la salud.
BluetoothProfile.ServiceListener
Una interfaz que notifica BluetoothProfile clientes IPC cuando se han conectado o
desconectado del servicio (es decir, el servicio interno que se ejecuta un perfil
particular)

Permisos de Bluetooth
Para utilizar las funciones Bluetooth en su aplicacin, debe declarar el permiso
Bluetooth BLUETOOTH . Usted necesita este permiso para realizar cualquier comunicacin
Bluetooth, tales como solicitar una conexin, aceptar una conexin y transferencia de datos.
Si desea que su aplicacin para iniciar la bsqueda de dispositivos o manipular la
configuracin de Bluetooth, tambin debe declarar la BLUETOOTH_ADMIN permiso. La mayora
de las aplicaciones necesitan este permiso nicamente para la capacidad de descubrir los
dispositivos Bluetooth locales. Las otras habilidades que otorga este permiso no deben ser
utilizados, a menos que la aplicacin es un "gestor de energa" que modificar la configuracin
de Bluetooth a peticin del usuario. Nota: Si utiliza BLUETOOTH_ADMIN permiso, entonces
tambin debe tener la BLUETOOTH permiso
Declarar el permiso Bluetooth (s) en el archivo de manifiesto de aplicacin. Por ejemplo:

Configuracin de Bluetooth
Figura 1: El cuadro de dilogo Bluetooth propicio.
Antes de que su aplicacin puede comunicarse a travs de Bluetooth, es necesario verificar
que el Bluetooth es compatible con el dispositivo, y si es as, asegrese de que est
habilitado.
Si Bluetooth no es compatible, entonces usted debe desactivar con gracia las funciones de
Bluetooth. Si Bluetooth es compatible, pero desactivada, entonces usted puede solicitar que el
usuario permita Bluetooth sin salir de su aplicacin. Esta configuracin se lleva a cabo en dos
pasos, usando elBluetoothAdapter .
1. Obtener el BluetoothAdapter
El BluetoothAdapter es necesario para cualquier actividad Bluetooth.Para obtener
el BluetoothAdapter , llame a la esttica () getDefaultAdapter mtodo. Esto devuelve
una BluetoothAdapter que representa adaptador Bluetooth propia del dispositivo (la radio
Bluetooth). Hay un adaptador Bluetooth para todo el sistema, y que su aplicacin puede
interactuar con este usando este objeto. Si getDefaultAdapter () devuelve un valor nulo,
entonces el dispositivo no soporta Bluetooth y su historia termina aqu. Por ejemplo

Habilitar Bluetooth
Despus, usted necesita para asegurarse de que la funcin Bluetooth est
activada. Llame isEnabled ()para comprobar si Bluetooth est habilitado. Si este mtodo
devuelve false, significa que Bluetooth est desactivado. Para solicitar la activacin de
Bluetooth, llame startActivityForResult () con elACTION_REQUEST_ENABLE Intencin
accin. Este emitir una solicitud para activar Bluetooth a travs de los ajustes del sistema (sin
detener su aplicacin). Por ejemplo:

if (! mBluetoothAdapter . isEnabled ()) {
Intent enableBtIntent = new Intent ( BluetoothAdapter .
ACTION_REQUEST_ENABLE );
startActivityForResult ( enableBtIntent , REQUEST_ENABLE_BT );
}
1. Aparecer un dilogo que solicita permiso al usuario para habilitar Bluetooth, como se
muestra en la Figura 1. Si el usuario responde "S", el sistema comenzar a activar
Bluetooth y el foco volver a su solicitud una vez que finalice el proceso (o no).
El REQUEST_ENABLE_BT constante pasa a startActivityForResult () es un nmero
entero definido localmente (que debe ser mayor que 0), que el sistema pasa de nuevo a
usted en su onActivityResult ()aplicacin como requestCode parmetro.
Si se habilita el Bluetooth tiene xito, la actividad recibe el RESULT_OK cdigo de resultado
en elonActivityResult () de devolucin de llamada. Si Bluetooth no estaba habilitado
debido a un error (o el usuario respondi "No"), entonces es el cdigo de
resultado RESULT_CANCELED .
Opcionalmente, la aplicacin tambin se puede escuchar
el ACTION_STATE_CHANGED Intencin de difusin, que el sistema emitir cada vez que el
estado de Bluetooth ha cambiado. Esta emisin contiene los campos
adicionales EXTRA_STATE y EXTRA_PREVIOUS_STATE , que contienen los nuevos y los
antiguos estados de Bluetooth, respectivamente. Los valores posibles para estos campos
extras
son STATE_TURNING_ON ,STATE_ON , STATE_TURNING_OFF y STATE_OFF . Escuchando esta
transmisin puede ser til para detectar los cambios realizados en el estado de Bluetooth,
mientras que su aplicacin se est ejecutando.
Consejo: Habilitacin de descubrimiento permitir automticamente Bluetooth. Si tiene
previsto habilitar constantemente detectabilidad dispositivo antes de realizar la actividad
de Bluetooth, puede omitir el paso 2 anterior. Lea acerca permitiendo detectabilidad , a
continuacin

Encontrar Dispositivos
Usando el BluetoothAdapter , usted puede encontrar dispositivos Bluetooth remotos, ya
sea a travs de la deteccin de dispositivos o mediante la consulta de la lista de (servidumbre)
dispositivos vinculados.
La deteccin de dispositivos es un procedimiento de exploracin que busca en el rea local
para los dispositivos habilitados para Bluetooth y luego solicitar alguna informacin acerca de
cada uno de ellos (esto se refiere a veces como "descubrir", "investigar" o "escaneo"). Sin
embargo, un dispositivo Bluetooth dentro del rea local responder a una solicitud de
descubrimiento slo si est habilitada actualmente para ser detectable. Si un dispositivo se
puede detectar, responder a la peticin de descubrimiento mediante el intercambio de
informacin, como el nombre del dispositivo, la clase y su direccin MAC nica. Usando esta
informacin, la deteccin de dispositivos realizar puede entonces elegir para iniciar una
conexin con el dispositivo descubierto.
Una vez que se realiza una conexin con un dispositivo remoto por primera vez, una solicitud
de vinculacin se presenta automticamente al usuario. Cuando se empareja un dispositivo, la
informacin bsica sobre el dispositivo (por ejemplo, el nombre del dispositivo, la clase, y la
direccin MAC) se guarda y se puede leer utilizando las API de Bluetooth. El uso de la
direccin MAC conocida por un dispositivo remoto, una conexin se puede iniciar con l en
cualquier momento y sin realizar el descubrimiento (suponiendo que el dispositivo est dentro
del rango).
Recuerde que hay una diferencia entre ser emparejado y estando conectado. Para ser
emparejado significa que dos dispositivos son conscientes de la existencia del otro, tener una
clave de enlace compartido que puede ser utilizado para la autenticacin, y son capaces de
establecer una conexin cifrada entre s. Para ser conectado significa que los dispositivos
actualmente comparten un canal RFCOMM y son capaces de transmitir datos entre s. Los
actuales Android Bluetooth API de dispositivos requieren para ser emparejado antes de una
conexin RFCOMM puede ser establecida. (Emparejamiento se realiza automticamente
cuando se realiza una conexin cifrada con la API de Bluetooth.)
Las secciones siguientes describen cmo encontrar los dispositivos que se han vinculado, o
descubrir nuevos dispositivos que utilizan la deteccin de dispositivos.
Nota: Los dispositivos con Android no son detectables por defecto. Un usuario puede hacer
que el dispositivo sea reconocible por un tiempo limitado a travs de la configuracin del
sistema, o una aplicacin puede solicitar que el usuario permita la detectabilidad sin salir de la
aplicacin. Cmo habilitar detectabilidad se discute a continuacin.
Consulta de dispositivos vinculados
Antes de realizar la deteccin de dispositivos, vale la pena consultar el conjunto de
dispositivos emparejados para ver si el dispositivo deseado ya se conoce. Para ello,
llame getBondedDevices () . Esto devolver un Conjunto
de BluetoothDevice representan dispositivos vinculados s. Por ejemplo, puede consultar
todos los dispositivos vinculados y luego mostrar el nombre de cada dispositivo para el
usuario, utilizando un ArrayAdapter:

Set < BluetoothDevice > pairedDevices = mBluetoothAdapter .
getBondedDevices ();
/ / Si hay dispositivos vinculados
si ( pairedDevices . tamao () > 0 ) {
/ / Recorrer dispositivos emparejados
para ( BluetoothDevice dispositivo : pairedDevices ) {
/ / Aadir el nombre y frente a un adaptador de serie para
mostrar en un ListView
mArrayAdapter . aadir ( dispositivo . getName () + "\ n" +
dispositivo . GetAddress ());
}
}
Todo lo que necesita desde el BluetoothDevice objeto con el fin de iniciar una conexin es
la direccin MAC. En este ejemplo, se guarda como una parte de un ArrayAdapter que se
muestra al usuario. La direccin MAC ms tarde se puede extraer con el fin de iniciar la
conexin. Usted puede aprender ms sobre la creacin de una conexin en la seccin
sobre Conexin de dispositivos .


Descubriendo dispositivos
Para iniciar el descubrimiento de dispositivos, simplemente llame StartDiscovery (). El
proceso es asincrnico y el mtodo devolver inmediatamente con un booleano que indica si
el descubrimiento se ha iniciado correctamente. El proceso de descubrimiento por lo general
implica una exploracin de consulta de unos 12 segundos, seguido de un anlisis de pgina
de cada dispositivo encontrado para recuperar su nombre de Bluetooth.
Su aplicacin debe registrar un BroadcastReceiver para el ACTION_FOUND Intencin con el fin
de recibir informacin sobre cada dispositivo descubierto. Para cada dispositivo, el sistema
emitir el ACTION_FOUNDIntencin. Esta intencin lleva los campos
adicionales EXTRA_DEVICE y EXTRA_CLASS , que contiene unaBluetoothDevice y
una BluetoothClass , respectivamente. Por ejemplo, aqu es cmo usted puede registrarse
para manejar la transmisin cuando se descubren los dispositivos:

/ / Crear un BroadcastReceiver para



Cuando el descubrimiento se encuentra un dispositivo
si ( BluetoothDevice . ACTION_FOUND . iguales ( accin )) {
/ / Obtener el objeto BluetoothDevice Del Intencin
BluetoothDevice dispositivo = intencin . getParcelableExtra
( BluetoothDevice . EXTRA_DEVICE );
/ / Aadir el nombre y direccin a un adaptador de serie a
mostrar en un ListView
mArrayAdapter . aadir ( dispositivo . getName () + "\ n"
+ dispositivo . GetAddress ());
}
}
};
/ / Se registra el

No se olvide de cancelar el registro durante OnDestroy
Todo lo que necesita desde el BluetoothDevice objeto con el fin de iniciar una conexin es
la direccin MAC. En este ejemplo, se guarda como una parte de un ArrayAdapter que se
muestra al usuario. La direccin MAC ms tarde se puede extraer con el fin de iniciar la
conexin. Usted puede aprender ms sobre la creacin de una conexin en la seccin
sobre Conexin de dispositivos .
Precaucin: Realizacin de la deteccin de dispositivos es un procedimiento pesado para el
adaptador Bluetooth y consume una gran cantidad de sus recursos. Una vez que haya
encontrado un dispositivo para conectarse, asegrese de que siempre se deja de
descubrimiento con cancelDiscovery () antes de intentar una conexin. Adems, si usted
ya tiene una conexin con un dispositivo, a continuacin, llevar a cabo el descubrimiento
puede reducir significativamente el ancho de banda disponible para la conexin, por lo que no
debe realizar el descubrimiento mientras est conectado.
Habilitacin de descubrimiento
Si usted desea hacer que el dispositivo local sea reconocible por otros dispositivos,
llamestartActivityForResult (Intent, int) con
el ACTION_REQUEST_DISCOVERABLE Intencin accin. Este emitir una solicitud para habilitar
el modo visible a travs de los ajustes del sistema (sin detener su aplicacin). De forma
predeterminada, el dispositivo se convertir detectable durante 120 segundos. Se puede
definir una duracin diferente, aadiendo el EXTRA_DISCOVERABLE_DURATION Intencin
extra. La duracin mxima de una aplicacin puede establecer es de 3600 segundos, y un
valor de 0 significa que el dispositivo est siempre visible. Cualquier valor por debajo de 0 o
por encima de 3600 se ajusta automticamente a 120 segundos). Por ejemplo, este fragmento
de cdigo establece la duracin de 300:
Intent discoverableIntent = new
Intent ( BluetoothAdapter . ACTION_REQUEST_DISCOVERABLE );
discoverableIntent . putExtra ( BluetoothAdapter .
EXTRA_DISCOVERABLE_DURATION , 300 );
startActivity ( discoverableIntent );
Figura 2: El cuadro de dilogo de descubrimiento que
permite.
Un cuadro de dilogo aparecer, pidiendo permiso al usuario para hacer que el dispositivo sea
visible, como se muestra en la Figura 2. Si el usuario responde "S", entonces el dispositivo se
volver reconocible para el perodo de tiempo especificado. Su actividad recibir entonces una
llamada a laonActivityResult ()) de devolucin de llamada, con el cdigo de resultado
igual a la duracin que el dispositivo se puede detectar. Si el usuario responde "No" o si se ha
producido un error, ser el cdigo de resultado RESULT_CANCELED .
Nota: Si Bluetooth no est activada en el dispositivo y luego permitiendo detectabilidad
dispositivo permitir automticamente Bluetooth.
El dispositivo se mantendr en silencio en modo de deteccin para el tiempo asignado. Si
usted desea ser notificado cuando el modo de deteccin ha cambiado, se puede registrar un
BroadcastReceiver para el ACTION_SCAN_MODE_CHANGED Intencin. Este contendr los
campos adicionales EXTRA_SCAN_MODE y EXTRA_PREVIOUS_SCAN_MODE , que le indican el
modo de exploracin nueva y antigua, respectivamente. Los valores posibles para cada uno
sonSCAN_MODE_CONNECTABLE_DISCOVERABLE , SCAN_MODE_CONNECTABLE o SCAN_MODE_NO
NE , que indican que el dispositivo est en modo visible, no en modo de deteccin, pero
todava es capaz de recibir conexiones o no en modo de deteccin y no puede recibir
conexiones, respectivamente.
No es necesario para permitir que la detectabilidad dispositivo si va a iniciar la conexin a un
dispositivo remoto. Habilitacin de descubrimiento slo es necesario cuando se desea que la
aplicacin para organizar un socket servidor que acepte conexiones entrantes, debido a que
los dispositivos remotos deben ser capaces de detectar el dispositivo antes de que pueda
iniciar la conexin
















http://developer.android.com/guide/topics/connectivity/bluet
ooth.html#FindingDevices

You might also like