2010-05-30 7 views
12

ich in der Android-Dokumentation, wie Bluetooth Auffindbarkeit-Modus aktivieren:Bluetooth deaktivieren Erkennbar-Modus auf Android

Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
startActivity(discoverableIntent); 

Dies wird das Gerät sichtbar für 300 Sekunden (documentation) machen.

Meine Frage ist: wie die Auffindbarkeit ausgeschaltet wird, bevor diese Zeitüberschreitung auftritt? Ich möchte die entsprechende Einstellung im Applet Einstellungen | Drahtlos und Netzwerke | Bluetooth-Einstellungen replizieren, das es ermöglicht, die Auffindbarkeit mit einem Klick ein- und auszuschalten.

Irgendwelche Hilfe?

+0

Gelöst mit Reflexion in diesem Thema: https://stackoverflow.com/a/47452626/5239473 –

Antwort

9

einfach eine neue Erkennbar Anfrage mit Dauer senden 1 (oder 0 könnte sogar funktionieren):

Intent discoverableIntent = new 
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 1); 
startActivity(discoverableIntent); 
+1

Lol, hackish , aber es funktioniert (nur mit 1). Danke;) – Venator85

+0

Einverstanden, aber es ist die beste/einzige Lösung, die ich finden konnte. Was macht deine App? –

+0

Es ist nur ein einfaches Widget zum Aktivieren/Deaktivieren der Auffindbarkeit, nichts Schickes :) – Venator85

1

cancelDiscovery() ist nicht dafür. Diese Methode kann verwendet werden, um das Scannen Ihres Geräts für andere Bluetooth-Geräte zu stoppen. Es unterscheidet sich davon, Gerät nicht sichtbar zu machen.

0

Vorsicht, wenn diese Methode verwendet wird, kann sie leicht geändert werden, da sie verborgen ist.

BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
try { 
    Method method = BluetoothAdapter.class.getMethod("setScanMode", int.class); 
    method.invoke(bluetoothAdapter, BluetoothAdapter.SCAN_MODE_CONNECTABLE); 
} catch (NoSuchMethodException | IllegalArgumentException | IllegalAccessException | InvocationTargetException e) { 
    Log.e(TAG, "Failed to turn off bluetooth device discoverability.", e); 
} 

Auch verwendbar mit SCAN_MODE_NONE und SCAN_MODE_CONNECTABLE_DISCOVERABLE (verwendet Standarddauer)

Source