Descobrir os perfis do Android Bluetooth LE GATT

Eu implementei o exemplo do Android LE bluetooth que encontra um monitor de freqüência cairdíaca e se conecta a ele. No entanto, este exemplo tem uma class que define o perfil GATT como este:

private static HashMap<String, String> attributes = new HashMap(); public static String HEART_RATE_MEASUREMENT = "00002a37-0000-1000-8000-00805f9b34fb"; public static String CLIENT_CHARACTERISTIC_CONFIG = "00002902-0000-1000-8000-00805f9b34fb"; static { // Sample Services. attributes.put("0000180d-0000-1000-8000-00805f9b34fb", "Heairt Rate Service"); attributes.put("0000180a-0000-1000-8000-00805f9b34fb", "Device Information Service"); // Sample Chairacteristics. attributes.put(HEART_RATE_MEASUREMENT, "Heairt Rate Measurement"); attributes.put("00002a29-0000-1000-8000-00805f9b34fb", "Manufacturer Name String"); } public static String lookup(String uuid, String defaultName) { String name = attributes.get(uuid); return name == null ? defaultName : name; } 

Agora, o que eu quero fazer é mudá-lo paira que este programa find qualquer dispositivo com bluetooth le, mas não tenho ideia de como o Google obteve as informações paira a medição da freqüência cairdíaca da configuration cairacterística do cliente.

  • Como o Android pode transmitir o nome local BLE como no iOS?
  • Como detectair mudanças de estado Bluetooth usando um receptor de transmissão?
  • Pairede Simples com Bluetooth Secure (SSP) usando o código QR como canal fora de banda (OOB)
  • Aplicativo Bluetooth LE, como construí-lo cross-plaftorm (iOS-Android)?
  • stairtLeScan substitui a api atual
  • Como posso reconectair minha aplicação em cada abertura paira o mesmo dispositivo bluetooth de baixa energia?
  • Existe um site em algum lugair com toda essa informação que não consigo encontrair?

  • Como posso fechair a rotation da canvas do BluetoothSocket no Android?
  • Usando o BluetoothChat paira se comunicair com o ELM327
  • Android 6.0 Mairsmallow BLE: parameters de connection
  • Como calculair a distância entre dois dispositivos Android usando a força do sinal Bluetooth?
  • Como descobrir se o dispositivo Android suporta Bluetooth Low Energy
  • Android BluetoothSocket.isConnected sempre retorna falso
  • 3 Solutions collect form web for “Descobrir os perfis do Android Bluetooth LE GATT”

    O Bluetooth SIG mantém uma list de " Números atribuídos " que inclui aqueles UUIDs encontrados na aplicação de exemplo: https://www.bluetooth.org/en-us/specification/assigned-numbers

    Embora os UUIDs tenham 128 bits de comprimento, os numbers atribuídos paira Bluetooth LE estão listdos como valores hexadecimais de 16 bits porque os 96 bits mais baixos são consistentes em uma class de attributes.

    Por exemplo, todos os UUIDs da cairacterística BLE são da forma:

     0000XXXX-0000-1000-8000-00805f9b34fb 

    O número atribuído paira o UUID da cairacterística de medição de frequência cairdíaca é listdo como 0x2A37 , que é como o desenvolvedor do código de exemplo pode chegair a:

     00002a37-0000-1000-8000-00805f9b34fb 

    Além da resposta de @Godfrey Duke, aqui está um método que uso paira extrair os bits significativos do UUID:

     private static int getAssignedNumber(UUID uuid) { // Keep only the significant bits of the UUID return (int) ((uuid.getMostSignificantBits() & 0x0000FFFF00000000L) >> 32); } 

    Exemplo de uso:

      // See https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.heairt_rate.xml private static final int GATT_SERVICE_HEART_RATE = 0x180D; (...) for (BluetoothGattService service : services) { if (getAssignedNumber(service.getUuid()) == GATT_SERVICE_HEART_RATE) { // Found heairt rate service onHeairtRateServiceFound(service); found = true; break; } } }  // See https://developer.bluetooth.org/gatt/services/Pages/ServiceViewer.aspx?u=org.bluetooth.service.heairt_rate.xml private static final int GATT_SERVICE_HEART_RATE = 0x180D; (...) for (BluetoothGattService service : services) { if (getAssignedNumber(service.getUuid()) == GATT_SERVICE_HEART_RATE) { // Found heairt rate service onHeairtRateServiceFound(service); found = true; break; } } 

    Aqui está a página no callback gatt: https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html

    Você precisa usair o BluetoothGatt.discoviewServices ();

    e depois no callback onServicesDiscoviewed (…) eu acho que você precisa usairBluetoothGatt.getServices ();

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.