关于Android上蓝牙开发的两个问题:
在Android上是否有一种方法可以始终保持蓝牙处于打开状态(我的应用程序可能会有长时间的设备发现阶段)?据我所知,默认值是120秒的倒计时。
是否存在任何开源的蓝牙API实现?
在2.3.6上,我可以通过将延迟设置为0来始终保持设备可见:
Intent di = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
di.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
private void ensureDiscoverable() {
if(D) Log.d(TAG, "ensure discoverable");
if (mBluetoothAdapter.getScanMode() !=
BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE) {
Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
startActivity(discoverableIntent);
}
Bluez栈在Linux上是一个开源的实现。它也可用于Windows,但Linux上的API更完整。
当你说“让蓝牙始终保持开启状态”时,你是指始终尝试发现其他设备吗?
大多数蓝牙芯片都有深度睡眠模式,在该模式下,芯片基本处于关闭状态,只会检查任何已建立链接上的活动。当你想要进行某些操作(如发现、建立连接)或者现有的链接上有活动时,它才会从深度睡眠中唤醒到全功率。
是的,它使用的电池电量比如果完全关闭蓝牙要多,但它不是一个完全的能耗吸血鬼。