Android - 如何让蓝牙始终开启?

时间:2009-09-14 12:43:36

标签: android bluetooth

有关Android上蓝牙开发的两个问题:

  1. 有没有办法在Android中始终启用蓝牙(我的应用程序中可能有一个很长的设备发现阶段)?据我所知,默认值是120s的倒计时。

  2. 是否存在任何开源蓝牙API实现?

6 个答案:

答案 0 :(得分:9)

现在,Android 2.0 API中提供了蓝牙实施功能。 请参阅thisthis

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

http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html#ACTION_REQUEST_DISCOVERABLE

答案 5 :(得分:0)

BlueCove是Java的开源蓝牙实现。

它可以在很多不同的机器上运行,如果正确的话,潜伏在某处的Android兼容版本。