Advertising with Android BLE

leslie45 Messages postés 71 Statut Membre -  
leslie45 Messages postés 71 Statut Membre -
Bonjour,

je fais de la programmation mobile sur Android, je suis sur Android Studio et j'essaye de publier un service par Advertising, un service avec un uuid que j'ai générer sur un site pour que je puisse avoir mon propre service. Le problème est que lorsque j'essaye de voir les services que j'ai annoncé à partir d'un autre mobile, rien ne s'affiche, il y a que les 2 services Generate_Access et Generate_Attribute qui s'affiche. Quelqu'un peut m'aider svp?
private void startAdvertising() {
mAdvertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
mAdvSettings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_POWER)
.setConnectable(true)
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_LOW)
.setTimeout(0)
.build();
mAdvData = new AdvertiseData.Builder()
//.setIncludeDeviceName(true)
.setIncludeTxPowerLevel(false)
.addServiceUuid(ParcelUuid.fromString("ec70697e-2ee0-11e6-b67b-9e71128cae77"))
.build();
Log.d(TAG,"Service added success");
mAdvertiser.startAdvertising(mAdvSettings, mAdvData, mCallback);
}

4 réponses

  1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    Hello,

    Je ne maitrise pas la connexion Bluetooth sous Android mais j'ai trouvé ça: https://code.tutsplus.com/tutorials/how-to-advertise-android-as-a-bluetooth-le-peripheral--cms-25426
    Est-ce que cela peut t'aider?
    0
    1. leslie45 Messages postés 71 Statut Membre
       
      slt! Merci d'avoir répondu!
      Oui, effectivement c'est un bon Tuto, je travaille avec ce tuto justement! Mais le problème c'est que la partie ajout de service ne marche pas, ou c'est moi qui a mal compris compris faire car apparemment les autres tutos disent qu'il faut ajouter le service dans le Server Gatt du mobile
      0
  2. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    Je vois une différence dans ton code par rapport au tuto

    AdvertiseData data = new AdvertiseData.Builder()
    .setIncludeDeviceName( true )
    .addServiceUuid( pUuid )
    .addServiceData( pUuid, "Data".getBytes( Charset.forName( "UTF-8" ) ) )
    .build();
    0
    1. leslie45 Messages postés 71 Statut Membre
       
      Oui mais cette ligne je l'ai supprimée car elle sert à envoyer des données pas créer un service.
      0
  3. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    As-tu implémenté la Callback? Pour savoir si ton service démarre bien?
    Et la Callback de ton scan?
    0
    1. leslie45 Messages postés 71 Statut Membre
       
      Tu parle de cette callback là? oui je l'ai bien insérée dans mon code
      AdvertiseCallback advertisingCallback = new AdvertiseCallback() {
      @Override
      public void onStartSuccess(AdvertiseSettings settingsInEffect) {
      super.onStartSuccess(settingsInEffect);
      }

      @Override
      public void onStartFailure(int errorCode) {
      Log.e( "BLE", "Advertising onStartFailure: " + errorCode );
      super.onStartFailure(errorCode);
      }
      };


      Je suis allée voir d'autres tuto et il parait qu'il faut ajouter carrément le service dans le Server Gatt en utilisant BluetoothGattServer. J'ai utilisé le code ci-dessous
      mGattServer = bluetoothManager.openGattServer(this, mGattServerCallback);
      BluetoothGattService service =new BluetoothGattService(uuid,BluetoothGattService.SERVICE_TYPE_PRIMARY);
      mGattServer.addService(service);
      Log.d(TAG,"Le service "+ uuid+" a été rajouté");

      Mais c'est sur la callback que je me plante car je ne comprends pas ce qu'il faut que je mette à l'intérieure!
      0
  4. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931
     
    La Callback te permet d'avoir, de manière générale, un retour lorsqu'une action est terminée. Ici, tu as 2 méthodes qui peuvent être appelées:
    -
    onStartSuccess()
    qui t'informe du succès de l'opération
    -
    onStartFailure()
    qui t'informe qu'il y a eu une erreur
    Dans ton cas, si tu veux savoir si tu passes dans le OK ou le KO, je te conseille de mettre un Log dans les 2 méthodes et de regarder la console. Si tu passes dans la méthode OK, il faudra peut-être voir s'il n'y a pas un problème dans le scan.
    0
    1. leslie45 Messages postés 71 Statut Membre
       
      ah désolé, je me suis mal exprimée! quand je parlais de la callback, je parlais de la deuxième callback dans le deuxième code "mGattServerCallback".

      Dans la callback advertisingCallback, ça se passe bien car j'ai mis un log, "Adv success" et j'arrive à l'obtenir.
      0
    2. leslie45 Messages postés 71 Statut Membre
       
      oui!
      Tu sais, grâce au deuxième bout de code que j'ai ajouté, j'ai réussi à ajouter mon service mais le service est ajouté 3 fois, je ne sais pas trop pourquoi mais il faut que je mette ce bout de code au bon endroit j'imagine.
      0
      1. BunoCS Messages postés 436 Date d'inscription   Statut Modérateur Dernière intervention   3 931 > leslie45 Messages postés 71 Statut Membre
         
        Cool! On progresse.. ;)
        0
    3. leslie45 Messages postés 71 Statut Membre
       
      J'ai récupéré le projet : https://github.com/jeffddrake/ble-android-gatt-server/tree/master/BluetoothLeGattSample/src/main/java/com/example/android/bluetoothlegatt

      Mais dit moi stp, si j'ai une class
      public class BluetoothLeService extends Service


      Et il y a une méthode dans cette class que j'aimerais utiliser toute au début de mon activité principale, comment je fais? c'est une question de base en Android mais j'ai pas trop fais java auparavant.
      j'arrive pas à comprendre comment il fait appel à BluetoothLeService dans ce projet
      0