在安卓系统中禁用蓝牙可发现模式

14

我在Android文档中找到了如何打开蓝牙可发现模式的方法:

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

这将使设备在300秒内变得可发现 (文档)。

我的问题是:如何在此超时发生之前关闭可发现性?我希望能够复制设置|无线和网络|蓝牙设置小程序中对应的设置,使得可发现性可以通过点击开关。

有任何帮助吗?


在此线程中使用反射解决:https://stackoverflow.com/a/47452626/5239473 - Jamie Hlusko
3个回答

12

只需发送一个持续时间为1(或0也可能有效)的新可发现请求:

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

同意,但这是我能找到的最好/唯一的解决方案。那么你的应用程序是做什么的? - Brad Hein
这只是一个简单的小部件,用于启用/禁用可发现性,没有什么花哨的 :) - Venator85
2
是的,1可以工作。但是,用户将被再次要求确认 :( 有其他方法吗? - QQQuestions
5
根据文档的说明,使用0将使蓝牙设备进入无限可发现模式。 - Dustfinger

1

使用此方法时要小心,因为它可能会很容易地被更改,因为它是隐藏的。

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);
}

也可与SCAN_MODE_NONESCAN_MODE_CONNECTABLE_DISCOVERABLE一起使用(使用默认持续时间)

来源


1

cancelDiscovery() 不是用来实现这个的。这个方法可以用来停止你的设备扫描其他蓝牙设备。它与使设备不可见是不同的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接