Hay 4 tareas principales al momento de hablar de Bluetooth.
- Configuracion del bluetooth
- Busqueda de los dispositivos que esten disponibles en el area local
- La conexion de dispositivos
- Transferencia de datos entre dispositivos
Configuración de Bluetooth
Antes de que la aplicacion se pueda comunicar atraves de Bluetooth, es necesario verificar que el Bluetooth es compatible con el dispositivo, y si es asi, asegurarnos de que esta habilitado.
Si el bluetooth NO es compatible, tendremos que deshabilitarlo. Si el bluetooth es compatible, pero esta desactivada, entonces tendremos que pedir al usuario que active el Bluetooth sin dejar la aplicacion. Esta configuracion se realiza en dos pasos, utilizando los BluetoothAdapter.
1.-Recibe las BluetoothAdapter
Los
BluetoothAdapter
se requiere para cualquier y toda la actividad Bluetooth. Para obtener los BluetoothAdapter
, llame al metodo getDefaultAdapter()
. Esto devuelve un BluetoothAdapter
que representa el adaptador Bluetooth del dispositivo propio (la radio Bluetooth).Hay un adaptador Bluetooth para todo el sistema, y su aplicación puede interactuar con él con este objeto. Si getDefaultAdapter()
devuelve un valor nulo, entonces el dispositivo no es compatible con Bluetooth y la historia termina aquí. Por ejemplo:BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter == null) {
// Device does not support Bluetooth
}
2.-Activar Bluetooth
A continuación, es necesario asegurarse de que Bluetooth está activada. Llamar
isEnabled()
para comprobar si se permite en la actualidad Bluetooth. Si este método devuelve false, Bluetooth está desactivado. Para solicitar que el Bluetooth esté habilitado, llamada startActivityForResult()
con ACTION_REQUEST_ENABLE
. Este emitirá una solicitud para activar Bluetooth a través de los ajustes del sistema (sin detener la aplicación). Por ejemplo:if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); }
Dispositivos de Busqueda
La búsqueda de dispositivos es un procedimiento de exploración que busca en el área local para dispositivos habilitados para Bluetooth y luego solicitar alguna información sobre cada uno de ellos (esto se refiere a veces como "descubrir", "investigar" o "análisis"). Sin embargo, un dispositivo Bluetooth dentro del área local responderá a una solicitud de descubrimiento sólo si está habilitado para ser detectable. Si un dispositivo se puede detectar, que responderá a la petición de descubrimiento mediante el intercambio de cierta información, como por ejemplo el nombre del dispositivo, la clase, y su dirección MAC única. Con esta información, el dispositivo realiza el descubrimiento puede entonces elegir para iniciar una conexión con el dispositivo descubierto.
La búsqueda de dispositivos es un procedimiento de exploración que busca en el área local para dispositivos habilitados para Bluetooth y luego solicitar alguna información sobre cada uno de ellos (esto se refiere a veces como "descubrir", "investigar" o "análisis"). Sin embargo, un dispositivo Bluetooth dentro del área local responderá a una solicitud de descubrimiento sólo si está habilitado para ser detectable. Si un dispositivo se puede detectar, que responderá a la petición de descubrimiento mediante el intercambio de cierta información, como por ejemplo el nombre del dispositivo, la clase, y su dirección MAC única. Con esta información, el dispositivo realiza el descubrimiento puede entonces elegir para iniciar una conexión con el dispositivo descubierto.
Una vez que se establece una conexión con un dispositivo remoto por primera vez, una solicitud de emparejamiento se presenta automáticamente al usuario. Cuando un dispositivo está sincronizado, la información básica acerca de ese dispositivo (como el nombre del dispositivo, la clase, y la dirección MAC) se guarda y se puede leer utilizando el API de Bluetooth. Utilizando la conocida dirección MAC de un dispositivo remoto, una conexión se puede iniciar con él en cualquier momento sin necesidad de realizar el descubrimiento (suponiendo que el dispositivo está dentro del rango).
Recuerde que hay una diferencia entre estar vinculado y conectado.
La conexion de dispositivos
Antes de realizar la detección de dispositivos, vale la pena consultar el conjunto de dispositivos emparejados para ver si el dispositivo deseado ya se conoce. Para ello, llame a
getBondedDevices()
. Esto devolverá un conjunto de BluetoothDevice
dispositivos s pareadas que representan. Por ejemplo, puede consultar todos los dispositivos vinculados y, a continuación muestran el nombre de cada dispositivo para el usuario, utilizando un ArrayAdapter:SetTodo lo que necesita BluetoothDevice con el fin de iniciar una conexión es la dirección MAC. En este ejemplo, se guarda como una parte de un ArrayAdapter que se muestra al usuario. La dirección MAC más adelante se pueden extraer con el fin de iniciar la conexión.pairedDevices = mBluetoothAdapter.getBondedDevices(); // If there are paired devices if (pairedDevices.size() > 0) { // Loop through paired devices for (BluetoothDevice device : pairedDevices) { // Add the name and address to an array adapter to show in a ListView mArrayAdapter.add(device.getName() + "\n" + device.getAddress()); } }
Conectando con un cliente
Con el fin de iniciar una conexión con un dispositivo remoto (un dispositivo de la celebración de un socket de servidor abierto), primero debe obtener una
BluetoothDevice
objeto que representa el dispositivo remoto. (Obtener una BluetoothDevice
se trata en la sección anterior sobre dispositivos Búsqueda .) A continuación, debe utilizar el BluetoothDevice
para adquirir una BluetoothSocket
e iniciar la conexión.- Uso de la
BluetoothDevice
, consiga unBluetoothSocket
llamandocreateRfcommSocketToServiceRecord(UUID)
.Esto inicializa unBluetoothSocket
que se conectará a laBluetoothDevice
. El UUID pasado por aquí debe coincidir con el UUID utilizado por el dispositivo de servidor cuando abrió suBluetoothServerSocket
(conlistenUsingRfcommWithServiceRecord(String, UUID)
). Utilizando el mismo UUID es simplemente una cuestión de codificar la cadena de UUID en su aplicación y, a continuación hace referencia a que tanto el servidor y el código de cliente. - Iniciar la conexión llamando a
connect()
.Tras esta llamada, el sistema realizará una búsqueda de SDP en el dispositivo remoto con el fin de que coincida con el UUID. Si la búsqueda tiene éxito y el dispositivo remoto acepta la conexión, que compartirá el canal RFCOMM para usar durante la conexión yconnect()
regresará. Este método es una llamada de bloqueo. Si, por cualquier razón, la conexión falla o elconnect()
varias veces al método (después de unos 12 segundos), entonces se producirá una excepción.Debido aconnect()
es una llamada de bloqueo, este procedimiento de conexión debe realizarse siempre en un hilo separado del hilo principal actividad.
private class ConnectThread extends Thread { private final BluetoothSocket mmSocket; private final BluetoothDevice mmDevice; public ConnectThread(BluetoothDevice device) { // Use a temporary object that is later assigned to mmSocket, // because mmSocket is final BluetoothSocket tmp = null; mmDevice = device; // Get a BluetoothSocket to connect with the given BluetoothDevice try { // MY_UUID is the app's UUID string, also used by the server code tmp = device.createRfcommSocketToServiceRecord(MY_UUID); } catch (IOException e) { } mmSocket = tmp; } public void run() { // Cancel discovery because it will slow down the connection mBluetoothAdapter.cancelDiscovery(); try { // Connect the device through the socket. This will block // until it succeeds or throws an exception mmSocket.connect(); } catch (IOException connectException) { // Unable to connect; close the socket and get out try { mmSocket.close(); } catch (IOException closeException) { } return; } // Do work to manage the connection (in a separate thread) manageConnectedSocket(mmSocket); } /** Will cancel an in-progress connection, and close the socket */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } }
7 pts lab de móviles
ResponderEliminar