Comment Android peut-il diffuser un nom local BLE comme dans iOS?

J'ai une application Android annonçant des données de diffusion bleue avec un service uuid et un nom local. Le problème est que ce "nom local" (aka nom de périphérique bluetooth) est limité à 8 caractères, chacun est une représentation unicode 16 bits, donc 2 octets par personnage. Chaque fois que j'essaie de changer le nom de l'appareil à 9 caractères, la diffusion bleue ne parvient pas à démarrer en raison de l'erreur 1 qui est

public static final int ADVERTISE_FAILED_DATA_TOO_LARGE = 1; 

Je sais que le paquet de diffusion de profil GAP a une longueur de 27 octets et 7 sont utilisés pour les en-têtes, donc 20 devraient rester libres d'utilisation, pas seulement 16?

  • Notifications Push sur Android: Google GCM vs Amazon SNS?
  • Installation de la bibliothèque Android SlidingMenu
  • Application de chat utilisant Firebase: Recevez une notification lorsque un nouveau message a été reçu - Android
  • Comment intégrer Google Analytics dans l'application Android
  • GoogleApiClient.connect () 'devait être de type interface, mais il a été jugé être virtuel
  • Un test unitaire Android ne se moque pas
  • Voici le vrai cornichon qui chatouille mon nickel:

    Lorsque iOS diffuse l'en-tête de l'en-tête, je reçois le nom local complet de l'appareil dans le cadre du ScanRecord, pas seulement limité à 16 octets. Une partie seulement de la diffusion, je n'établis pas ici une connexion GATT.

    Comment iOS est-il capable de le faire? Par exemple, sur mon Android, j'ai pu récupérer un ID unique de 14 caractères et 28 octets d'une émission de publicité iOS. 28 octets est plus long que la limite de 27 octets imposée par la norme bluetooth 4.0. Comment est-ce qu'Approid a réussi à reprendre la diffusion complète de plus de 27 octets? Et comment est-ce que mon «nom local» ou mon nom de périphérique ne peut comporter que 8 caractères maximum ou 16 octets ou ne peut-il pas commencer la diffusion?

    C'est mon code:

      final BluetoothLeAdvertiser advertiser = mBluetoothAdapter.getBluetoothLeAdvertiser(); //advertise settings final AdvertiseSettings.Builder settingsBuilder = new AdvertiseSettings.Builder(); settingsBuilder.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY); settingsBuilder.setConnectable(true); settingsBuilder.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH); //advertise data AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder(); ParcelUuid uuid = new ParcelUuid(UUID.fromString("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")); dataBuilder.addServiceUuid(uuid); mBluetoothAdapter.setName("12345678"); //8 characters works, 9+ fails dataBuilder.setIncludeDeviceName(true); if (advertiser!=null) { advertiser.startAdvertising(settingsBuilder.build(), dataBuilder.build(), mAdvertiseCallback); } mAdvertiseCallback = new AdvertiseCallback() { @Override public void onStartSuccess(AdvertiseSettings settingsInEffect) { super.onStartSuccess(settingsInEffect); Log.d(LOGN, "BLE STARTED ADVERTISING BROADCAST "+settingsInEffect); } @Override public void onStartFailure(int errorCode) { super.onStartFailure(errorCode); Log.d(LOGN, "BLE ADVERTISING FAILED TO START: "+errorCode); } }; 

    Existe-t-il un moyen pour Android d'inclure le nom local complet dans le cadre de la diffusion comme iOS?

    Merci!

  • Chaîne Split Split
  • Comment puis-je détecter de façon dynamique si mon application est système ou normale?
  • Application Android ClassNotFoundException pour l'activité principale
  • Mise en page dans horizontalScrollView c'est la taille de l'écran
  • Puis-je changer le nom du fichier Préférences?
  • Run-as says 'package is unknown' après la mise à niveau Android vers 4.3
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.