2015-04-22 1 views
1

J'apprends à programmer avec les appareils Bluetooth LE et à écrire une application mobile simple. Voici ma question d'entrée de gamme:Appareil Bluetooth LE - comment reconnaître un certain type d'appareil dans une application mobile?

Dites que je veux seulement me connecter à un certain type de périphérique Bluetooth LE (comme un tensiomètre), mais quand je fais un scan, il peut renvoyer plus d'un résultat s'il y a autre appareil Bluetooth LE présent dans la portée. Je pourrais donc obtenir les résultats suivants:

appareil 1 RSSI, périphérique 1 Nom, Adresse appareil 1;

appareil 2 RSSI, appareil 2 Nom, périphérique 2 Adresse ...

Comment puis-je dire le code pour récupérer le type d'appareil que je veux (dans ce cas, le dispositif de la tension artérielle)? Est-ce que l'adresse de l'appareil est assignée par le fournisseur du produit et sont-elles assez uniques et suivant un schéma que je peux utiliser pour identifier ce type d'appareil? Si non, quelle autre option ai-je pour que l'application reconnaisse automatiquement un certain type de périphérique Bluetooth?

Répondre

2

Si vous voulez prendre le dispositif particulier signifie que vous devez mentionner dans displayGattServices. Par exemple: -pour l'aide du dispositif de capteur de fréquence cardiaque, vous avez mentionné comme ce

if (SampleGattAttributes.lookup(uuid, unknownCharaString) 
         .contains("Heart")) { 
        hrt_rate_char = gattCharacteristic; 
       } 

Pour plus de détails voir méthode displayGattServices:

private void displayGattServices(List<BluetoothGattService> gattServices) { 
     if (gattServices == null) 
      return; 
     String uuid = null; 
     String unknownServiceString = getResources().getString(
       R.string.unknown_service); 

     String unknownCharaString = getResources().getString(
       R.string.unknown_characteristic); 

     ArrayList<HashMap<String, String>> gattServiceData = new ArrayList<HashMap<String, String>>(); 

     ArrayList<ArrayList<HashMap<String, String>>> gattCharacteristicData = new ArrayList<ArrayList<HashMap<String, String>>>(); 

     mGattCharacteristics = new ArrayList<ArrayList<BluetoothGattCharacteristic>>(); 

     for (BluetoothGattService gattService : gattServices) { 
      HashMap<String, String> currentServiceData = new HashMap<String, String>(); 

      uuid = gattService.getUuid().toString(); 
      currentServiceData.put(LIST_NAME, 
        SampleGattAttributes.lookup(uuid, unknownServiceString)); 

      currentServiceData.put(LIST_UUID, uuid); 
      gattServiceData.add(currentServiceData); 

      ArrayList<HashMap<String, String>> gattCharacteristicGroupData = new ArrayList<HashMap<String, String>>(); 
      List<BluetoothGattCharacteristic> gattCharacteristics = gattService 
        .getCharacteristics(); 

      ArrayList<BluetoothGattCharacteristic> charas = new ArrayList<BluetoothGattCharacteristic>(); 

      for (BluetoothGattCharacteristic gattCharacteristic : gattCharacteristics) { 
       charas.add(gattCharacteristic); 

       HashMap<String, String> currentCharaData = new HashMap<String, String>(); 

       uuid = gattCharacteristic.getUuid().toString(); 
       if (SampleGattAttributes.lookup(uuid, unknownCharaString) 
         .contains("Heart")) { 
        hrt_rate_char = gattCharacteristic; 
       } 
       currentCharaData.put(LIST_NAME, 
         SampleGattAttributes.lookup(uuid, unknownCharaString)); 

       currentCharaData.put(LIST_UUID, uuid); 
       gattCharacteristicGroupData.add(currentCharaData); 

      } 
      mGattCharacteristics.add(charas); 

      gattCharacteristicData.add(gattCharacteristicGroupData); 

     } 
    } 
+0

Est-il défini par le fabricant de l'appareil? Aussi, quoi que ce soit pour iOS? Merci. – user2210021

1

Supposons que si vous voulez que votre application de se connecter seulement pour entendre les dispositifs de surveillance de la fréquence, et Si vous avez la liberté de vous connecter et de vérifier, vous devez utiliser l'implémentation du service de fréquence cardiaque standard. Mais, supposons que vous vouliez le faire sans vous connecter à un périphérique BLE, le champ Appearance dans le paquet de publicité devrait vous aider, à condition que les développeurs du serveur BLE aient pris soin de définir l'apparence du périphérique dans le service GAP. Les valeurs d'apparence 832 et 833 sont pour Generic Heart rate Sensor et Heart Rate Sensor: Heart Rate Belt. Cela étant dit, soyez assurés que vous aurez également la possibilité de vous connecter à des appareils personnalisés qui implémentent le service de fréquence cardiaque en tant que service complémentaire avec leur application principale, uniquement si le service personnalisé a les caractéristiques GAP définies 833 ou 832 Comment puis-je savoir que l'appareil contient "coeur" est un capteur de fréquence cardiaque?