Bluetooth-pairing - wie zu zeigen das einfache Abbrechen/Paar-dialog?
Vorbereitet habe ich ein einfacher test-Projekt für diese Frage auf GitHub.
Ich versuche zum erstellen einer Android-app, die würde einen QR-code Scannen aus einem computer-Bildschirm und verwenden Sie dann die Daten (MAC-Adresse und PIN-oder hash) für einfach Paarung (Bindung) mit einem Bluetooth-Gerät.
Ähnlich wie die beliebten App InstaWifi - aber für die Klassischen Bluetooth.
Für Testzwecke mache ich nicht alle barcode-scanning noch nicht, aber gerade die Anzeige einer Liste der Geräte:
Nachdem der Benutzer berührt eine der Geräte-pairing versucht wird, in MainActivity.java:
private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PIN);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 1234);
//device.setPin(new byte[]{1,2,3,4}); <- DOES NOT CHANGE ANYTHING
//device.setPairingConfirmation(false);
startActivityForResult(pairingIntent, REQUEST_BT_SETTINGS);
}
Leider das popup immer noch, fragt nach der PIN:
Da habe ich eigentlich angegeben, eine PIN in meinem source-code, war ich eigentlich erwarten, dass ein anderes, einfacheres system-dialog angezeigt werden (dies ist gezeigt, wenn dabei die NFC-OOB-Kopplung):
Aus der Suche nach Lösungen, ich weiß, dass es eine setPin() Methode, aber es ist hier nicht anwendbar (oder ist es?) - weil ich versuche zu koppeln Sie das ganze smartphone mit dem Bluetooth-Gerät und nicht nur die app...
Meine Frage: Wie man Android-OS zu zeigen, die einfach Abbrechen/Paar-dialog?
Suche nach Bluetooth-pairing-Anfrage string auf GitHub hat nicht gezeigt, irgendwelche Hinweise...
UPDATE: Auf unrealsoul007 s Vorschlag (danke) habe ich den Quellcode aktualisieren in MainActivity.java und jetzt einfach Abbrechen/Paar-dialog angezeigt:
private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION);
pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(pairingIntent, REQUEST_BT_PAIRING);
}
Aber ich bin nicht sicher, wie Sie Sie, um die Kopplung abzuschließen - weil onActivityResult
heißt mit resultCode=0
sogar, bevor das Dialogfeld wird geschlossen:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
//this is called before user clicks Cancel or Pair in the dialog
if (requestCode == REQUEST_BT_PAIRING) {
if (resultCode == Activity.RESULT_OK) { //0 != -1
Log.d("XXX", "Let#s pair!!!!"); //NOT CALLED
}
return;
}
}
- tut
onActivityResult
aufgerufen nach Klick-Pair-Mädchen als auch..? - Hat die onActivityResult aufgerufen, nachdem die Kommissionierung paar oder nur, wenn das popup ist?
- haben Sie es geschafft, es passiert nur, wenn man akzeptiert das pairing?
- Nope, ich hab es schließlich mit createBond()
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie aufgefordert, die pin einzugeben, weil das ist, was Sie fordern in Ihrem
pairingIntent
.Anstatt
Verwenden
Wie bereits erwähnt hier,
onReceive
Methode für einige übertragenen Veranstaltung?onActivityResult
.onActivityResult
genannt wird, noch bevor Benutzer berührt Abbrechen "oder" Paar " - button im dialog - bitte sehen Sie meine aktuelle Frage.