如何在没有用户输入的情况下创建一个Android RFCOMM套接字?

30

这是情景:

我需要为Android编写一个应用程序,创建与带有蓝牙适配器的PC的RFCOMM套接字(我还将编写服务器)。

我的要求是用户不必手动配对设备。

实际上,通过大量的Hack,我正在使用 createInsecureRfcommSocket

一个小场景:我有一个Android应用程序,它通过已打开的RFCOMM套接字与Linux电脑交换信息。我可以在设备上手动设置PIN码(硬编码是一种选择)

我正在寻找不同的解决方案:

编写JNI包装器

就像Max Kellermann在此处所做的那样,我可以编写一个JNI层来进行所有配对阶段。 这应该是一个不错的选择,但是存在一个问题:

NDK 4b不提供libbluetooth库,因此-lbluetooth失败,同样适用于NDK v.3。
选项:
1. 查找包含lib bluetooth的NDK 1.5。在经过数天的网络搜索后,我无法找到它。有人拥有或知道我可以在哪里找到它吗? 2. 自己编译Android的libbluetooth并将其用于-lbluetooth。我没有成功地构建它们。有什么提示吗?
使用API公开的内容
有人知道如何使用createRfcommSocketToServiceRecord并使用户不必手动配对设备吗?这可能吗?我应该如何编写服务器?
我不知道的内容
也许(肯定!)有些事情我不知道。也许我可以使用其他东西?不是RFCOMM?SDP?
也许我可以使用Android API手动配对?

我希望我的表述足够清晰,如果不够清晰,请随时提问。再次感谢大家的支持,我将全力以赴 :)

谢谢你们的支持!


9
猜测而已,但如果需要用户参与(批准)才能进行配对,我不会感到惊讶。至少这与其他需要用户交互以确保安全性的Android设计一致。 - Chris Stratton
我理解你的观点,并且我同意。但这是我参与的一个项目的要求。而且解释很简单,我们考虑一些需要检查许多不同“事物”的工作,这些“事物”公开了一些蓝牙服务。每次都要配对设备只是浪费时间。 - Enrico Carlesso
1
Enrico,我确定这并不是你的问题的答案,但也许值得问一下——是否有其他通信机制可以用来完成这项工作?BT 有点烦人。你可以将数据编码到手机广播的 BT 设备名称中,然后扫描设备就会得到该名称(这是几个字节的数据)。 - mchang
你在这里的使用场景是什么?如果您正在查询某些内容以查找设备上是否有可用服务,那么SDP是否是更好的选择?我非常确定您不必配对进行服务发现。 - Gareth Davidson
3
感谢大家的提示。按顺序:@sugarynugs谢谢,我已经能够自己编译了,但这还不够。Android本身有一种非常奇怪的使用bluez的方式... @mchang我们目前同时使用蓝牙和wifi连接,但在某些情况下必须使用蓝牙。@Gaz是的,但是通过sdp我只能找到服务,但我需要有一个通道来进行通信...一旦我找到了由sdp广播的rfcomm套接字,我必须连接到它,因此需要配对... - Enrico Carlesso
显示剩余4条评论
3个回答

2

最终,我可以说你不能

即使你找到了方法,使用包装器、编写C模块等,Android的演变可能会改变你正在使用的东西。

因此,没有选择。可悲。

让我们看看Android蓝牙API将来会如何改变。


0

谢谢回复 :D 我需要指出这个问题是来自2010年11月的 :D - Enrico Carlesso

-2
Android的蓝牙API尚未完成确定,将会发生更改。请自行承担使用风险。该类实现了Bluetooth RFCOMM层的API。RFCOMM套接字类似于普通套接字,需要地址和端口号。区别当然是地址是蓝牙设备地址,而端口号是RFCOMM通道。该API允许通过bind、listen和accept方法建立监听套接字,也可通过connect、connectAsync和waitForAsyncConnect进行外部连接。构建套接字后,你需要创建它,然后在使用完毕后销毁它。create和accept都返回用于实际数据的文件描述符。或者,你可以调用getInputStream和getOutputStream来检索相应的流,而无需经过文件描述符。

你读了问题吗?因为我无法理解答案...它根本不符合要求。 - Enrico Carlesso
这段内容已经从http://www.androidjavadoc.com/1.0_r1_src/android/bluetooth/RfcommSocket.html复制并粘贴。请添加您自己的输入。 - Lee Taylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接