题
有关Android上蓝牙开发的两个问题:
-
有没有办法在Android中始终启用蓝牙(我的应用程序中可能有一个很长的设备发现阶段)?据我所知,默认值是120s的倒计时。
-
是否存在任何开源蓝牙API实现?
醇>
其他提示
如果您唯一需要考虑的是长时间的发现延迟(“电池续航时间”),那么启用蓝牙始终开启可能不是一个好的决定。
对于第三方蓝牙API,我唯一听说过的是 iAnywhere Blue SDK (来自Sybase,非免费,仅提供评估版本),其中涵盖了将来从 system / bluetooth 和 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上使用,但在Linux上API更加完善。
当你说“让蓝牙始终开启”时,你的意思是,总是试图发现其他设备吗?
大多数蓝牙芯片都采用深度睡眠模式,芯片大部分处于关闭状态,只需检查任何已建立的链路上的活动。当您希望它执行某些操作(发现,建立连接)或现有链接上有活动时,它只会唤醒全功率。
是的,它比蓝牙完全关闭时使用更多的电池电量,但它不是一个完整的吸血鬼。
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);
}
http://developer.android.com/reference/android/蓝牙/ BluetoothAdapter.html#ACTION_REQUEST_DISCOVERABLE
BlueCove 是一个针对Java的开源蓝牙实现。
它可以在很多不同的机器上运行,如果正确的话,潜伏在某处的Android兼容版本。
不隶属于 StackOverflow