Appariement d'un périphérique Bluetooth à Faible Énergie de l'appareil Android

Est-il possible de se connecter automatiquement à la technologie Bluetooth Low Energy (BLE) appareils?

La Android documentation indique que le [BluetoothDevice.connectGatt()](https://developer.android.com/reference/android/bluetooth/BluetoothDevice.html#connectGatt(android.content.Context, boolean, android.bluetooth.BluetoothGattCallback)) a un paramètre paramètre:

booléen indiquant si pour vous connecter automatiquement à l'appareil BLE
dès qu'il devient disponible

Cependant, pour appeler cela, vous avez besoin d'un BluetoothDevice premier. Autant que je sache, la seule façon de l'avoir est par la numérisation des périphériques disponibles. La configuration d'un scan à chaque fois pour se connecter à un appareil ne semble pas être un moyen souhaitable. Aussi, j'ai essayé d'utiliser nRF de Contrôle Panneau Maître pour se connecter à mon périphérique à l'aide de la autoConnect = true, mais cela ne permet pas de se connecter à l'appareil. La connexion sans autoConnect cependant, il est à se connecter, et j'ai réussi à lire et écrire des données à partir et à mon périphérique de cette façon, avec succès.

La voie générale en Bluetooth à deux appareils jumelés. Toutefois, à la recherche de mon BLE de l'appareil et de l'aide BluetoothDevice.createBond() ne semble pas fonctionner. Dans mon ACTION_BOND_STATE_CHANGED-rappel, le EXTRA_BOND_STATE et EXTRA_PREVIOUS_BOND_STATE aller de BOND_BONDING à BOND_NONE et à l'arrière. Je n'ai pas lu une erreur ou quelque chose - alors peut-être que je manque quelque chose ici. Voici le rappel:

private final BroadcastReceiver mGattUpdateReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        final String action = intent.getAction();
        if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {

            final int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.ERROR);
            final int prevState = intent.getIntExtra(BluetoothDevice.EXTRA_PREVIOUS_BOND_STATE, BluetoothDevice.ERROR);

            Log.e(TAG, "prevState " + prevState + ", state " + state);
        }
    }
};

Donc ce type de liaison ne semble pas fonctionner.

Ma question est: suis-je en train de faire quelque chose de mal pour le couplage ou la connexion automatique? Ou comment j'ai actuellement il travail la seule façon correcte? Il semble être une vraie douleur (et de la batterie-vidange) à scanner pour les appareils de tous les temps, de voir si l'appareil est-il, si, afin de lire les données et de vérifier de retour demain, sinon, revenez dans une heure ou deux. Le point de Bluetooth, c'est qu'il devrait paire directement chaque fois qu'il est proche, n'est-ce pas?

OriginalL'auteur jdepypere | 2015-04-18