2009-09-14 105 views
12

两个问题上的Android蓝牙开发:Android - 如何启用蓝牙始终打开?

  1. 有没有一种方法,使蓝牙是始终打开(我可能在我的应用程序很长的设备发现相)的Android?据我所见,默认值是从120s开始倒数。

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

回答

9

蓝牙实现现在可在Android 2.0 API中使用。 见thisthis

+0

是的,我也看到了这个消息。最后,可用:) – 2009-10-30 10:22:26

+0

蓝牙是在SDK中可用,但AVD不支持2.0 API(5级)或文档不达标最新:http://developer.android.com/guide/developing/工具/ avd.html – 2009-10-30 13:51:08

+1

概览链接可能是一个更好的起点比其他两个环节: http://developer.android.com/intl/zh-CN/guide/topics/wireless/bluetooth.html – RickNotFred 2010-05-12 19:21:41

2

如果您唯一担心的是长时间的发现延迟(“电池寿命”),则启用蓝牙始终打开,可能不是一个好决定。

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

根据Android的Bluetooth roadmap,大多数等待Java API,蓝牙2.1 + EDR的东西都将在未来的某个时间实现。

祝您的项目顺利。

+0

感谢您的电池的建议,但在这个阶段的项目,我做不关心电池,只关于恒定的蓝牙:) – 2009-09-14 15:04:22

1

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

当你说,'启用蓝牙始终打开'你的意思是,总是试图发现其他设备?

大多数蓝牙芯片都有深度睡眠模式,其中芯片大部分都处于关闭状态,只是出现了一个检查任何已建立链路上的活动。只有当你想要做某件事(发现,建立连接)或现有链接上有活动时,它才会醒来。

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

+0

是的,永远在我的意思是不断的客户端发现。 android的“问题”是默认的120s倒计时。这是可变的吗?可以说600s? – 2009-09-16 10:32:46

0

BlueCove是一个用于Java的开源蓝牙实现。

它适用于很多不同的机器,如果正确的话有一个潜伏在某处的Android兼容版本。

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

+0

这是并不总是(或发现与原始提问者meants),这提示用户确认。 – Tiago 2012-01-05 12:52:44

+1

我们永远不能使设备在Android的总是可见的,但我们可以从120秒延长其时间300秒。 – 2012-01-05 13:39:39

2

在2.3.6我可以保证设备始终可见通过将延迟0:

Intent di = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
di.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 0);