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