Android上蓝牙开发的两个问题:
有没有办法让蓝牙在 Android 中始终处于开启状态(我的应用程序中可能有一个很长的设备发现阶段)?据我所见,默认值是从 120 秒开始倒计时。
它是否存在任何开源蓝牙 API 实现?
如果您唯一关心的是长时间的发现延迟(“电池寿命”),那么让蓝牙始终处于开启状态可能不是一个好的决定。
至于第三方蓝牙 API,我只听说过iAnywhere Blue SDK(来自 Sybase,不是免费的,只有评估版),它涵盖了一些功能,将来会从系统/蓝牙和bluez包。
根据 Android 的蓝牙路线图,大部分等待已久的东西,如 Java API、蓝牙 2.1 + EDR 将在未来某个时间点实现。
祝你的项目好运。
在 2.3.6 上,我可以通过将延迟设置为 0 来保持设备始终可见:
Intent di = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
di.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
Linux 上的Bluez堆栈是一个开源实现。它也可以在 Windows 上使用,但 API 在 Linux 上更加完整。
当您说“使蓝牙始终处于开启状态”时,您的意思是始终尝试发现其他设备吗?
大多数蓝牙芯片都有深度睡眠模式,在这种模式下,芯片大部分都处于关闭状态,只是出现一个检查任何已建立链接的活动。只有当您希望它做某事(发现、建立连接)或现有链接上有活动时,它才会完全唤醒。
是的,它比完全关闭蓝牙使用更多的电池电量,但它不是一个完全的吸血鬼。
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);
}
BlueCove是 Java 的开源蓝牙实现。
它可以在很多不同的机器上运行,如果正确的话,会有一个 Android 兼容版本潜伏在某个地方。