2017-04-25 1 views
0

J'ai un problème avec le scan BLE d'Android, je ne reçois pas le nom complet des périphériques scannés trouvés, je reçois seulement la première lettre que vous avez idée comment résoudre ce problème?Scan Ble Android/getName() ou périphérique non complet ou nul

Je travaille avec un appareil de 7,0 Nougat qui soutient BLE

Ceci est une partie de mon code:

mBluetoothScanner = mBluetoothAdapter.getBluetoothLeScanner(); 
     settings = new ScanSettings.Builder() 
       .setScanMode(ScanSettings.SCAN_MODE_LOW_POWER) 
       .build(); 

    if (Build.VERSION.SDK_INT >= 21) { 
      mScanCallback = new ScanCallback() { 
       @Override 
       public void onScanResult(int callbackType, ScanResult result) { 
        messageLog.error("onScanResult"); 
        BluetoothDevice btDevice = null; 
        if (Build.VERSION.SDK_INT >= 21) { 
         btDevice = result.getDevice(); 
         messageLog.error("btDevice : " + btDevice.getName() + "|" + btDevice.getAddress() + "|" + Arrays.toString(btDevice.getUuids())); 
        } 
        if (btDevice != null && btDevice.getName() != null && !isInDeviceList(btDevice)) 
         mDeviceList.add(btDevice); 
       } 

       @Override 
       public void onBatchScanResults(List<ScanResult> results) { 
       } 

       @Override 
       public void onScanFailed(int errorCode) { 
        Log.e("Scan Failed", "Error Code: " + errorCode); 
       } 
      }; 
     } 

Avec btDevice.getName() Je ne reçois que la première lettre d'un appareil scanné, est-ce ma faute ou provient-il de l'API Android BLE?

Répondre

0

Si le nom du périphérique ne rentre pas dans les données publicitaires puisqu'il doit y inclure d'autres données, il n'enverra que le préfixe du nom par voie hertzienne. Il n'y a rien que vous puissiez faire à part changer les données de publicité dans le firmware du périphérique.

Pour obtenir les données de publicité exactes, vous pouvez examiner le fichier ScanRecord "result.getScanRecord()" dans onScanResult.

+0

Merci, je vais essayer de changer le nom dans le firmware et je vais vous dire si cela fonctionne. J'ai essayé le "result.getScanRecord()" et j'ai réussi à obtenir les 8 premières lettres, Pensez-vous que c'est un nombre fixe d'octets? – dabbu

+0

Merci monsieur :) J'ai utilisé result.getScanRecord() au lieu de getName et de changer le nom dans le firmware, passez une bonne journée! – dabbu