Android Connecter l'appareil Bluetooth automatiquement après l'appariement par programmation
Dans mon application j'ai besoin d'appairage périphérique bluetooth et immédiatement se connecter avec elle.
J'ai la fonction suivante dans l'ordre de liaison des périphériques:
public boolean createBond(BluetoothDevice btDevice)
{
try {
Log.d("pairDevice()", "Start Pairing...");
Method m = btDevice.getClass().getMethod("createBond", (Class[]) null);
Boolean returnValue = (Boolean) m.invoke(btDevice, (Object[]) null);
Log.d("pairDevice()", "Pairing finished.");
return returnValue;
} catch (Exception e) {
Log.e("pairDevice()", e.getMessage());
}
return false;
}
Et je l'utilise comme la façon suivante:
Boolean isBonded = false;
try {
isBonded = createBond(bdDevice);
if(isBonded)
{
//Connect with device
}
}
Et il me montre la boîte de dialogue pour le couplage de dispositifs et d'entrer le code pin.
Le problème est que createBond renvoient toujours vrai, et il doen attendre jusqu'à ce que j'ai entrer le code pin et relié à l'appareil, donc je ne l'utilise pas correctement:
isBonded = createBond(bdDevice);
if(isBonded) {...}
La question est donc Comment puis je l'ai couplé avec l'appareil et quand il est jumelé connecter?
P. D Mon code est basé dans la première réponse de la fil de discussion suivant: Android + Paire de périphériques via bluetooth par programmation
OriginalL'auteur RdlP | 2014-02-14
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé la solution.
J'ai d'abord besoin d'un
BroadcastReceiver
comme:Et puis j'ai besoin de vous inscrire le récepteur comme suit:
De cette façon, le récepteur est à l'écoute pour
ACTION_FOUND
(Découvrir de nouveaux périphérique) etACTION_BOND_STATE_CHANGED
(Dispositif de changement de ses obligations d'état), puis-je vérifier si le nouvel état estBOND_BOUNDED
et si c'est-je me connecter avec l'appareil.Maintenant quand je l'appelle
createBond
Méthode (décrite dans la question) et entrer le code pin,ACTION_BOND_STATE_CHANGED
le feu etdevice.getBondState() == BluetoothDevice.BOND_BONDED
seraTrue
et il va se connecter.pour un SPP conection je utiliser les lignes suivantes:
BluetoothDevice device = adapter.getRemoteDevice(mac);
final UUID SERIAL_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();
out = socket.getOutputStream();
in = socket.getInputStream();
Oùadapter
est une instance deBluetoothAdapter
etmac
est une Chaîne de caractères.pourquoi ne pas directement utiliser mmSocket.connect() afin de se connecter et de communiquer avec un autre appareil?
Tout d'abord, j'ai besoin de créer des sockets objet, j'utilise de la ligne 1, 2 et 3 pour créer des sockets objet, puis-je utiliser
socket.connect();
OriginalL'auteur RdlP