如何在Android中创build不安全的RFCOMM套接字?

我正在寻找不安全地通过rfcomm套接字的方式。 我能够find下面提到的方式

Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class}); tmp = (BluetoothSocket) m.invoke(device, 1); 

这暂时正在做我想要的。 即使在这里的文档说,我们需要使用createInsecureRfcommSocketToServiceRecord进行不安全的连接。 但是没有这样的方法。 我发现的唯一方法是使用如上所示的reflection。 甚至在那传递的方法是在createInsecureRfcommSocket而不是createInsecureRfcommSocketToServiceRecord。 我只是想知道这种方式有多可靠。 如果我在方法中提到createInsecureRfcommSocketToServiceRecord,连接永远不会发生。

Solutions Collecting From Web of "如何在Android中创build不安全的RFCOMM套接字?"

createInsecureRfcommSocketToServiceRecord()包含在Android API级别10开始,因此文档会鼓励您使用它,因为文档始终遵循最新版本的API。 如果您的目标是API低于10(又名2.3.3或姜饼),那么这种方法是不公开的。

您通过reflection调用的方法createInsecureRfcommSocket()BluetoothDevice内部的一个私有方法,自从大致Android 2.0以来一直存在。 调用隐藏方法的问题在于,它们不能保证在所有设备上或将来都存在,所以您赌博了一下。 我的猜测是你的方法可能大部分时间在大多数2.0+设备上工作,因为实现其公共表弟createRfcommSocketToServiceRecord()所需的服务在堆栈层非常相似。

底线,如果你想保证与你的蓝牙实现的通用兼容性,你将不得不针对你的应用程序的目标2.3.3(API等级10)。 现在公开的API暴露在不安全的RFCOMM之下,很难说底层的私有实现是否可能改变。

那么大部分回复的答案都在2011年3月30日之前的这个post里。

在我的应用程序中寻找类似问题的解决scheme时,我发现这个博客写在3月30日。

这将有助于所有仍在SO上寻找这个问题解决scheme的人

http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/

现在解决scheme变得非常简单。 只需在您的项目中包含InsecureBluetooth.java,然后在BluetoothChatService.java中更改2行。

 tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true); 

 tmp = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true); 

而已 !

你见过这个createInsecureRfcommSocketToServiceRecord