我想在Android手机和远程设备之间建立蓝牙通信。远程设备的类是基本的,只是一个简单的蓝牙适配器。当我使用蓝牙扫描设备功能时,手机会识别来自不同级别的设备(例如计算机,手机,蓝牙耳机),但不会识别此设备。 我尝试使用三星Galaxy Theos和一款搭载Android 2.1的HTC Wildfire,但我得到了相同的结果。 这可能是手机制造商或Android过滤某些类别的设备吗?否则,有没有其他方法可以让这个设备被发现?
提前致谢。
lorenth
答案 0 :(得分:4)
我能够解决这个问题,不是通过改变Android端的东西,而是改变蓝牙适配器的类。我知道这并没有解决0x00类设备被阻止的原始问题,但至少你可以使用带有android的BT串口设备尽管有bug。
我从ebay购买了一个蓝牙串行转换器(链接在这里:http://www.ebay.co.uk/itm/Bluetooth-RS232-serial-Converter-Module-Adapter-Board-/190508188703?pt=LH_DefaultDomain_0&hash=item2c5b2c441f),正如预期的那样,我的HTC Desire在其默认配置中无法识别。
我不想尝试上面提到的Zorn软件的应用程序,因为有些人报道它弄乱了他们的HTC手机。相反,我从BT设备的AT命令数据表中发现,您可以使用UART连接和终端程序更改设备的类号等参数。
我花了一段时间才发现您无法使用蓝牙串行连接访问配置界面,但您必须使用设备上的物理RX和TX引脚。您还需要将名为“Key”的引脚连接到Vcc以激活命令模式。所以我使用AVR串行编程器器件的RS232到UART接口连接到RX / TX引脚,并使用Realterm作为终端程序。一旦我有正确的波特率38400,并且交换了我最初以错误的方式连接的RX和TX引线,这使得AT命令接口工作。
我在这里使用了发电机 http://bluetooth-pentest.narod.ru/software/bluetooth_class_of_device-service_generator.html 获取有效的非零类号(我使用对象传输/计算机/桌面工作站,相当于0x100104),并使用命令将其输入设备
at + class = 100104 \ r \ n
其中\ r \ n表示Enter(参见数据表)。
关闭BT适配器后,断开“Key”引脚并再次打开,我能够以正常方式将其与手机配对。数据传输也有效。我再次使用AVR程序员的UART和Realterm将一些数据(ASCII世界中的Hello World消息)发送到适配器的RX / TX引脚。在Android端,我使用应用程序SENA Bterm来接收数据。
我希望这有助于某人用手机和嵌入式系统做有趣的事情。
答案 1 :(得分:3)
在网上进行一些研究后,对于那些想要在Android上开发蓝牙应用程序的人(在2.1 Eclair上测试我不知道其他版本)似乎有些手机制造商决定忽略任何宣传的蓝牙设备本身为类0×00 并且不允许连接,在发现时触发Intents甚至在蓝牙设置页面上列出它。这是Eclipse的LogCat部分在调试模式下的样子
DTUN_HCID Device [00:09:EF:58:04:38] class is 0x00 - skip it
我在三星Galaxy 3 teos和HTC Wildfire上尝试过。显然它在Nexus One上运行良好。太糟糕的谷歌停止销售它。如果你们中的一些人在其他手机上进行过测试并且有效,请告诉我们。
Lorenth
答案 2 :(得分:0)
我已经在一些不同版本的Android上测试了BlueTooth与串行(Class 0x00)设备的连接,结果如下:
Android 2.1(橙色或O2,无法记住):对确定 运行Android 2.2的东芝上网本:配对 HTC Desire,Vodafone,Android 2.2:无法发现设备 HTC Desire HD,Vodafone,Android 2.2:无法发现设备
所以有些电话公司很可能阻止了0x00访问。我与沃达丰联系,a)得到澄清,b)说服他们,如果可能的话,解决这个问题。如果我得到任何有用的东西,我会发布。
大卫
答案 3 :(得分:0)
更新: 此解决方案依赖于从您的应用内部访问读取logcat,因此无法在现代版Android(>大约3.0)上使用。如果有人使用Android v2.x,请在此处留下更新链接。
假设您正在为手机编写应用程序,我写了一个可以解决此问题的课程:
http://zornsoftware.codenature.info/blog/pairing-spp-bluetooth-devices-with-android-phones.html
我可以确认LG Optimus One,以及三星Galaxy S(都是Android 2.2)都遇到了这个问题。我已经联系了LG和三星,并将发回我听到的任何结果。