Ir al contenido principal

Adroid + Bluetooth



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.

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:

Set 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());
    }
}
Todo 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. 



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.



  1. Uso de la BluetoothDevice, consiga un BluetoothSocket llamando createRfcommSocketToServiceRecord(UUID).
    Esto inicializa un BluetoothSocket que se conectará a la BluetoothDevice . El UUID pasado por aquí debe coincidir con el UUID utilizado por el dispositivo de servidor cuando abrió su BluetoothServerSocket (con listenUsingRfcommWithServiceRecord(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.
  2. 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 y connect() regresará. Este método es una llamada de bloqueo. Si, por cualquier razón, la conexión falla o el connect() varias veces al método (después de unos 12 segundos), entonces se producirá una excepción.
    Debido a connect() 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) { }
    }
}

Comentarios

Publicar un comentario

Entradas populares de este blog

Pequeño Juego con LEDS y Dip Switch

Siguiendo con los mini-proyectos, lo que quería hacer originalmente era un tipo "candado" con push-button y LEDs, el objetivo seria, meter la combinacion de botones correcta y los LEDS encendería por un motivo practico, en forma de serpiente. El objetivo no cambio, pero por falta de "material" lo hice con un dip switch de X entradas(depende de que tan grande quieras la combinación). CONOCIMIENTOS(max. 7 estrellas): Electronica:     ★ ★ Programación: ★ ★ Juego de Combinación + LEDs El programa es un poco mas complicado que el mini-proyecto pasado , pero aun asi es basico. Guardamos las salidas de los LEDs en un arreglo, despues con los valores recibidos y comparados de los dip switch jugamos con los LEDś. Hardware Requerido (1) Arduino Uno (6) LED (8) Resistencias 330 Ω (1) Dip Switch Circuito Usamos las salidas del ARduino 2-7 para los LEDS Usamos la salida A5, A4 para el dip switch Para hacer prender los LEDS tienes que encontrar la ...

Tarea #2 - LAB Visión - Sal y Pimienta - Procesamiento de imagenes - Python

Que tal para esta entrada se nos encargo  modificar  o agregar a nuestro código, una rutina que agregara degradación por adición de ruido(Sal y pimienta) base a dos parámetros: Intensidad = que tanto porcentaje de la imagen se le agregara sal y pimienta Polarización = que tan negros/blancos se pone un pixel seleccionado. y otra rutina que quitara filtrara ese ruido. Antes de comenzar Mi programa se esta empezando a poner " FEO " son demasiados métodos y por cada tarea esta creciendo considerablemente, pese a esto, esta sera la ultima entrada que estaré modificando este código, el las siguientes trabajare por clases.  El los avances de la tarea están en mi  github . Un poco de teoría Les comparto información de relevante que me ayudo a despejar dudas, al final de la entrada en el apartado de REFERENCIAS pondré los links de TODA esta información. El RUIDO en las imágen...

Tarea #5 - Codigo Hamming - Python

Codigo hamming Liga al repo Teoria segun wikipedia Antes de los códigos Hamming se utilizaron ciertos códigos detectores de error, como lo fueron el código linteing, pero ninguno llegó a ser tan eficaz como los de Hamming. A continuación se describen algunos de estos códigos. Paridad   La   paridad   consiste en añadir un bit, denominado   bit de paridad , que indique si el número de los bits de valor 1 en los datos precedentes es par o impar. Si un solo bit cambiara por error en la transmisión, el mensaje cambiará de paridad y el error se puede detectar (nótese que el bit donde se produzca el error puede ser el mismo bit de paridad). La convención más común es que un valor de paridad   1   indica que hay un número impar de unos en los datos, y un valor de paridad de   0   indica que hay un número par de unos en los datos. info. completa y un vídeo que me ayudo mucho para esta tarea: (TIENEN QUE VERLO - OBLIGATORIO) http://www.you...