Red de conocimiento informático - Material del sitio web - Cómo operar Android4.3 Bluetooth BLE

Cómo operar Android4.3 Bluetooth BLE

Android4.3 Bluetooth BLE preliminar

1. Conceptos clave:

Perfil de atributos genéricos (GATT)

Conéctese a través de BLE, lea Perfile las especificaciones generales para escribir datos pequeños de tipo atributo. Todos los perfiles de aplicaciones BLE actuales se basan en GATT.

Protocolo de Atributos (ATT)

El GATT se basa en el Protocolo ATT. ATT ha realizado optimizaciones especiales para dispositivos BLE, específicamente utilizando la menor cantidad de datos posible durante el proceso de transmisión. Cada atributo tiene un UUID único y los atributos se transmitirán en forma de características y servicios.

Característica

La característica puede entenderse como un tipo de datos, que incluye un valor y 0 a más descripciones (Descriptor) del valor secundario.

Descriptor

Descripción de la característica, como rango, unidad de medida, etc.

Servicio

Recopilación de características. Por ejemplo, un servicio llamado "Monitor de frecuencia cardíaca" puede contener múltiples Características, que pueden incluir una Característica llamada "medición de frecuencia cardíaca".

2. Roles y responsabilidades:

Existen dos grupos de roles en la interacción entre dispositivos Android y dispositivos BLE:

Dispositivos centrales vs. periféricos (Central). vs. periférico);

servidor GATT vs. cliente GATT.

Central vs. periférico:

Los conceptos de dispositivo central y dispositivo periférico están dirigidos al Conexión BLE en sí. La función central es responsable de escanear anuncios. El papel periférico es el responsable de hacer publicidad.

Servidor GATT versus cliente GATT:

Estos dos roles dependen de cómo se comunican los dos dispositivos después de que la conexión BLE sea exitosa.

Ejemplo:

Hay un dispositivo BLE de seguimiento de actividad y un dispositivo Android que admite BLE. Los dispositivos Android admiten la función central, mientras que los dispositivos BLE admiten la función periférica. La creación de una conexión BLE requiere la existencia de ambos roles. Si ambos solo admiten el rol central o ambos solo admiten el rol periférico, no se puede establecer la conexión.

Cuando se establece la conexión, es necesario transmitir datos del GATT entre ellos. Quién actúa como servidor y quién como cliente depende de la situación específica de transmisión de datos. Por ejemplo, si el dispositivo BLE de seguimiento de actividad necesita transmitir datos del sensor al dispositivo Android, el rastreador de actividad naturalmente se convertirá en el lado del servidor, y si el rastreador de actividad necesita obtener información de actualización del dispositivo Android, el dispositivo Android puede ser más; Adecuado como lado del servidor.

3. Permisos y características:

Al igual que el Bluetooth clásico, las aplicaciones que usan Bluetooth necesitan declarar permisos BLUETOOTH. Si necesitan escanear dispositivos u operar la configuración de Bluetooth, también necesitan BLUETOOTH_ADMIN. permisos:

Además de los permisos de Bluetooth, si necesita la función BLE, también debe declarar uses-feature:

Cuando se requiere es verdadero, la aplicación solo se puede instalar y ejecutar en dispositivos Android que admitan BLE; cuando se requiere es falso, todos los dispositivos Android se pueden instalar y ejecutar normalmente; Debe determinar si el dispositivo se está ejecutando cuando se ejecuta el código. Función de soporte BLE:

// Utilice esta verificación para determinar si BLE es compatible con el dispositivo. // puedes desactivar selectivamente las funciones relacionadas con BLE.

if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {

Toast.makeText(this, R.string. ble_not_supported, Toast.LENGTH_SHORT).show();

terminar();

}

4. Iniciar Bluetooth:

Antes. Al usar Bluetooth BLE, debe confirmar si el dispositivo Android admite la función BLE (lo requerido es falso), también debe confirmar si Bluetooth está activado.

Si se descubre que BLE no es compatible, no se pueden utilizar las funciones relacionadas con BLE. Si se admite BLE pero Bluetooth no está activado, deberá activar Bluetooth.

Pasos para activar Bluetooth:

1. Obtenga el Adaptador Bluetooth

Se requiere un Adaptador Bluetooth para todas las operaciones de Bluetooth en el sistema Android. Corresponde al módulo Bluetooth de. En el dispositivo Android local, BluetoothAdapter es un singleton en todo el sistema. Después de obtener su ejemplo, puede realizar operaciones Bluetooth relacionadas.

El ejemplo de código para obtener BluetoothAdapter es el siguiente:

// Inicializa el adaptador Bluetooth.

final BluetoothManager bluetoothManager =

(BluetoothManager ) getSystemService(Context .BLUETOOTH_SERVICE);

mBluetoothAdapter = bluetoothManager.getAdapter();

Nota: Aquí el BluetoothManager se obtiene a través de getSystemService y el BluetoothAdapter se obtiene a través de BluetoothManager. BluetoothManager es compatible con Android 4.3 y superior (nivel de API 18).

2. Determine si Bluetooth es compatible y active Bluetooth

Después de obtener el Adaptador Bluetooth, debe determinar si Bluetooth es compatible y si Bluetooth está activado.

Si no está activado, debe pedirle al usuario que active Bluetooth:

adaptador Bluetooth privado mBluetoothAdapter;

...

// Garantiza que Bluetooth esté disponible en el dispositivo y que esté habilitado. De lo contrario,

// muestra un cuadro de diálogo solicitando permiso al usuario para habilitar Bluetooth.

if (mBluetoothAdapter =. = nulo || !mBluetoothAdapter.isEnabled ()) {

Intención enableBtIntent = nueva Intención(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);

}

5. Busque dispositivos BLE:

Busque dispositivos BLE llamando a startLeScan() de BluetoothAdapter. Al llamar a este método, debe pasar el parámetro BluetoothAdapter.LeScanCallback.

Por lo tanto, debe implementar la interfaz BluetoothAdapter.LeScanCallback y los resultados de búsqueda de dispositivos BLE se devolverán a través de esta devolución de llamada.

Dado que la búsqueda debe minimizar el consumo de energía, debe prestarle atención durante el uso real:

1. Cuando encuentre el dispositivo correspondiente, deje de escanear inmediatamente;

2. No busque dispositivos en bucle y establezca un límite de tiempo adecuado para cada búsqueda. Evite el escaneo continuo y el consumo de batería cuando el dispositivo no esté dentro del alcance disponible.

El código de muestra de búsqueda es el siguiente:

/**

* Actividad para escanear y mostrar dispositivos BLE disponibles.

* /

la clase pública DeviceScanActivity extiende ListActivity {

BluetoothAdapter mBluetoothAdapter privado;

mScanning booleano privado;

Handler privado mHandler;

// Detiene el escaneo después de 10 segundos.

private static final long SCAN_PERIOD = 10000;

...

private void scanLeDevice(final boolean enable) {

if (enable) {

// Detiene el escaneo después de un período de escaneo predefinido.

mHandler.postDelayed(new Runnable() {

p>

@Override

public void run() {

mScanning = false;

mBluetoothAdapter.stopLeScan(mLeScanCallback );

}

}, SCAN_PERIOD);

mScanning = true;

mBluetoothAdapter.startLeScan(mLeScanCallback);

} else {

mScanning = false;

mBluetoothAdapter.stopLeScan(mLeScanCallback);

}

...

}

...

}

Si solo necesita buscar periféricos con un UUID específico, puede llamar a startLeScan Método (UUID[], BluetoothAdapter.LeScanCallback).

La matriz UUID especifica el UUID de los servicios GATT admitidos por su aplicación.

El ejemplo de implementación de BluetoothAdapter.LeScanCallback es el siguiente:

private LeDeviceListAdapter mLeDeviceListAdapter;

...

// Escaneo de dispositivos devolución de llamada.

private BluetoothAdapter.LeScanCallback mLeScanCallback =

nuevo BluetoothAdapter.LeScanCallback() {

@Override

public void onLeScan(final Dispositivo BluetoothDevice, int rssi,

byte[] scanRecord) {

runOnUiThread(new Runnable() {

@Override

público void run() {

mLeDeviceListAdapter.addDevice(dispositivo);

mLeDeviceListAdapter.notifyDataSetChanged();

}

});

}

};

Nota: Al buscar, solo puede buscar dispositivos Bluetooth tradicionales o dispositivos BLE. Los dos son completamente independientes y no se pueden buscar. al mismo tiempo.

6. Conéctese al servidor GATT:

Para que dos dispositivos se comuniquen a través de BLE, primero deben establecer una conexión GATT. De lo que estamos hablando aquí es de que el dispositivo Android sirve como cliente y se conecta al servidor GATT.

Para conectarse al servidor GATT, debe llamar al método connectGatt() de BluetoothDevice. Esta función toma tres parámetros: contexto, autoConnect (booleano) y objeto BluetoothGattCallback. Ejemplo de llamada:

mBluetoothGatt = device.connectGatt(this, false, mGattCallback);

La función tiene éxito y devuelve el objeto BluetoothGatt, que es una encapsulación del perfil GATT. A través de este objeto, podemos realizar operaciones relacionadas en el Cliente GATT. BluetoothGattCallback se utiliza para pasar algunos estados y resultados de la conexión.

Varios ejemplos operativos comúnmente utilizados por BluetoothGatt:

connect(): Conexión a un dispositivo remoto.

discoverServices(): busca servicios compatibles con el dispositivo conectado.

disconnect(): Desconecta la conexión GATT con el dispositivo remoto.

close(): Cierra el Cliente GATT.

readCharacteristic(característica): Lee la característica especificada.

setCharacteristicNotification(característica, habilitada): configurado para enviar una notificación cuando cambia el valor de la característica especificada.

getServices(): Obtiene los servicios soportados por el dispositivo remoto.

Espera.

Nota:

1. Existe una relación de secuencia entre ciertas llamadas a funciones. Por ejemplo, primero debe conectarse a discoverServices.

2. Algunas llamadas a funciones son asincrónicas y el valor requerido no se devolverá inmediatamente, sino que se devolverá en la función de devolución de llamada de BluetoothGattCallback. Por ejemplo, devoluciones de llamada discoverServices y onServicesDiscovered, devoluciones de llamada readCharacteristic y onCharacteristicRead, devoluciones de llamada setCharacteristicNotification y onCharacteristicChanged, etc.