J'ai une application où je contrôle par programmation l'appairage et le désappairage Bluetooth. Je peux coupler avant la connexion et dissocier ensuite. La raison pour laquelle je dois le faire est spécifique à ma demande et ne relève pas de la portée de ma question.
Fondamentalement, ce que je fais est:
ib
à IBluetooth
objet comme décrit dans cette réponseAndroid.bluetooth.device.action.PAIRING_REQUEST
ib.createBond(address)
ib.setPin(address, pinBytes)
depuis BroadcastReceiverQuoi qu'il en soit, cette approche fonctionne très bien, sauf que lorsque je fais le jumelage, je reçois une notification dans la barre d'état demandant à l'utilisateur d'entrer un PIN pour terminer le jumelage. Mais c'est en fait inutile, car au moment où l'utilisateur voit cela, mon application a déjà utilisé setPin()
. J'aimerais vraiment que cette notification soit a) n'apparaisse pas du tout, soit b) soit automatiquement rejetée .
Je me rends compte que ce n'est peut-être même pas possible, mais j'ai pensé que je demanderais au cas où quelqu'un aurait une idée créative.
Essayez de définir d'abord la confirmation dans le PAIRING_REQUEST
BluetoothDevice device = intent.getParcelableExtra("Android.bluetooth.device.extra.DEVICE");
device.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(device, true);
device.getClass().getMethod("cancelPairingUserInput").invoke(device);
Cela a fonctionné pour moi entre deux Android utilisant RFCOMM mais je n'entre aucun code PIN
Depuis Android API 19 Google a changé ces méthodes en méthodes publiques, donc il n'y a plus besoin de Reflection. :)
Pour ce faire, dans l'événement de notification PAIRING_REQUEST:
BluetoothDevice localBluetoothDevice = (BluetoothDevice)intent.getParcelableExtra("Android.bluetooth.device.extra.DEVICE");
Class localClass = localBluetoothDevice.getClass();
Class[] arrayOfClass = new Class[0];
localClass.getMethod("cancelPairingUserInput", arrayOfClass).invoke(paramBluetoothDevice, null)).booleanValue();
Mais vous devez me dire comment avez-vous jumelé votre appareil distant sans que l'utilisateur n'entre la clé d'accès/PIN? bien sûr, vous connaissez le PIN pour le périphérique distant qui essaie de se coupler à votre appareil, mais comment l'avez-vous fourni PIN au périphérique distant).