Disable Bluetooth discoverable mode on Android
I found in the Android documentation how to turn Bluetooth discoverability mode on:
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
This will make the device discoverable for 300 seconds (documentation).
My question is: how to turn discoverability OFF before this timeout occurs? I'd like to replicate the corresponding setting in Settings|Wireless and networks|Bluetoo开发者_JAVA技巧th settings applet, that allows discoverability to be turned on and off with a click.
Any help?
Just send a new discoverable request with duration 1 (or 0 might even work):
Intent discoverableIntent = new
Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 1);
startActivity(discoverableIntent);
cancelDiscovery()
is not for this. This method can be used to stop the scanning of your device for other bluetooth devices. It is different from this to make device not visible.
Care when using this method, it might be easily changed as it is hidden.
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);
}
Also usable with SCAN_MODE_NONE
and SCAN_MODE_CONNECTABLE_DISCOVERABLE
(uses default duration)
Source
精彩评论