13

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

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

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

4

6 回答 6

9

蓝牙实现现在可在 Android 2.0 API 中使用。看到这个这个

于 2009-10-28T12:11:32.097 回答
2

如果您唯一关心的是长时间的发现延迟(“电池寿命”),那么让蓝牙始终处于开启状态可能不是一个好的决定。

至于第三方蓝牙 API,我只听说过iAnywhere Blue SDK(来自 Sybase,不是免费的,只有评估版),它涵盖了一些功能,将来会从系统/蓝牙bluez包。

根据 Android 的蓝牙路线图,大部分等待已久的东西,如 Java API、蓝牙 2.1 + EDR 将在未来某个时间点实现。

祝你的项目好运。

于 2009-09-14T15:00:39.650 回答
2

在 2.3.6 上,我可以通过将延迟设置为 0 来保持设备始终可见:

Intent di = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
di.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);
于 2012-04-03T18:20:33.653 回答
1

Linux 上的Bluez堆栈是一个开源实现。它也可以在 Windows 上使用,但 API 在 Linux 上更加完整。

当您说“使蓝牙始终处于开启状态”时,您的意思是始终尝试发现其他设备吗?

大多数蓝牙芯片都有深度睡眠模式,在这种模式下,芯片大部分都处于关闭状态,只是出现一个检查任何已建立链接的活动。只有当您希望它做某事(发现、建立连接)或现有链接上有活动时,它才会完全唤醒。

是的,它比完全关闭蓝牙使用更多的电池电量,但它不是一个完全的吸血鬼。

于 2009-09-15T07:59:01.577 回答
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

于 2011-12-29T11:12:36.093 回答
0

BlueCove是 Java 的开源蓝牙实现。

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

于 2009-09-17T12:14:42.040 回答