Android BLE de la Connexion à plusieurs périphériques à la fois

Je développe une Application Android qui se connecte à un BLE de l'Appareil et lit le Gatt de Services du Gatt et de Caractéristiques. J'ai utilisé le BluetoothLeGatt exemple de projet à partir de l'Android Développement d'un Site comme ma référence.

Jusqu'à présent, je suis capable de programmation pour vous connecter à un appareil (j'ai pris note de mon Adresse de Périphérique pour être en mesure de le faire) et le filtre de l'Gatt de Service que je veux lire et que des Services de Caractéristiques spécifiques en prenant note de l'UUID de la fois la fonction et les Caractéristiques. L'échantillon fourni par Google met également à jour dès qu'il y a un message envoyé à partir de mon BLE Appareil à mon Application Android. Dans l'ensemble, je n'ai aucun problème à cette fin.

Cependant, à la lecture de plus GATT, j'ai trouvé qu'il est possible de se connecter à de multiples BLE appareils (tous les esclaves OU les serveurs - être celles qui envoient les données) à l'aide d'une seule Application Android (en tant que maître OU client - comme celui qui reçoit ces données). Donc, ce que j'ai essayé de faire, c'était d'avoir 2 BLE Périphériques (Adresse différente), a pris note de leur Adresse, et puis mon application tente de se connecter une fois l'application voit que ces 2 adresses sont en place et en cours d'exécution.

Dans le code, j'appelle cette fonction quand je vois mes 2 BLE Appareils:

private void connectToDevice(){

    mDeviceName = deviceList.get(currentIndex).getName();
    mDeviceAddress = deviceList.get(currentIndex).getAddress();

    Log.e(TAG, "connecting to device name = " + mDeviceName);

    mBluetoothLeService.connect(mDeviceAddress);
}

currentIndex est initialement réglé à zéro. Puis une fois que j'aurai une connexion réussie, je n':

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothLeService.ACTION_GATT_CONNECTED.equals(action)) {
            Log.e(TAG, "connected");
            mConnected = true;

            if(currentIndex < deviceList.size()-1) currentIndex ++;
            connectToDevice();

        } 
    }
};

Où je vérifier si j'ai encore des appareils à connecter dans mon deviceList, si oui, incrémenter le compteur, puis connectez jusqu'à ce que je échappement tout dans ma liste.

Cependant, il me semble ne pas avoir de succès à tous à l'aide de cette méthode.

Veuillez noter que la commutation de connexion (round robin) entre mes appareils n'est pas une option. Ce sera un problème quand j'ai beaucoup de dispositifs et il est important de faire passer leurs messages en temps réel, sans retards. Cela dit, je dois avoir une connexion en direct à mes appareils.

Quelqu'un a déjà essayé de se connecter à plusieurs BLE Appareils Android? Je ne suis pas sûr de la manière de procéder sur ce.

Oui, vous pouvez et je l'ai fait à l'aide d'une simple boucle. Ce que je fais, c'est, d'Abord, je scan pour les appareils, une fois trouvé je l'ai mis dans une liste de tableaux et d'appeler cette méthode connect. Pour réussir à établir la connexion, vous aurez également besoin d'un lock & attendre mécanisme puisque vous voulez essayer d'établir la connexion deuxième après la première.
auriez-vous l'esprit de l'affichage de votre code qui fait le travail? Je te remercie de tous les fils sur ce sujet.

OriginalL'auteur Razgriz | 2016-02-14