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
Vous devez vous connecter pour publier un commentaire.
Il fonctionne sans rescan. Vous n'avez pas besoin de couplage. Appelez simplement
BluetoothGatt.connect()
de nouveau pour gatt objet que vous avez acquise à partir de la première connexion.Vous recevrez
onConnectionStateChange
événement dans votreBluetoothGattCallback
dès que ble de l'appareil sera de nouveau disponible. Si vous utilisez l'option de connexion automatique, vous n'avez même pas besoin d'appelerBluetoothGatt.connect()
méthode. Surveiller votre cllback, et ne pas oublier de fermer BluetoothGatt avecclose()
si vous ne voyez aucun lien trop longtemps.Et oui, pour obtenir la première connexion vous devez analyser pour ble appareils avec
BluetoothAdapter.startLeScan
, pas les communes périphériques bluetooth scan.oui, Android ble de la pile n'est pas convivial du tout)))) Tous les async, rescan à chaque démarrage, etc... Vous pouvez essayez de garder tout en collant service, mais si elle sera fermée, vous aurez besoin de ble rescan.
Ok merci, je pense manquait quelque chose parce que je pensais BLE serait massivement soutenu...
le bon côté est que tous les rescan-qui se reconnecte va sans négociations avec l'utilisateur, pas comme le commun de couplage bluetooth.
Vrai, mais le couplage a été qu'une seule fois, maintenant, vous avez encore besoin de stocker l'adresse de la BLE de l'appareil pour savoir à qui vous devez vous connecter automatiquement
OriginalL'auteur Raiv