sun*_*nil 18 android bluetooth insecure-connection
我正在寻找不安全地连接rfcomm socket的方法.我能够找到下面提到的方法
Method m = device.getClass().getMethod("createInsecureRfcommSocket", new Class[] {int.class});
tmp = (BluetoothSocket) m.invoke(device, 1);
Run Code Online (Sandbox Code Playgroud)
这暂时正在做我想做的事.即使是这里的文档也说我们需要使用createInsecureRfcommSocketToServiceRecord来进行不安全的连接.但是没有这样的方法.我发现的唯一方法是使用如上所示的反射.甚至在createInsecureRfcommSocket中传递的方法,而不是createInsecureRfcommSocketToServiceRecord.我只是想知道这种方式有多可靠.如果我在方法中提到createInsecureRfcommSocketToServiceRecord,则连接永远不会发生.
Dev*_*red 29
createInsecureRfcommSocketToServiceRecord()包含从Android API Level 10开始,因此文档将鼓励您使用它,因为文档始终遵循最新版本的API.如果您的目标API低于10(又名2.3.3或Gingerbread),那么您无法公开访问该方法.
您通过反射调用的方法createInsecureRfcommSocket()是一种私有方法BluetoothDevice,自大约Android 2.0以来一直存在.调用隐藏方法的问题在于它们不能保证在所有设备上或将来存在......所以你赌博了一下.我的猜测是你的方法大部分时间都可能在大多数2.0以上的设备上工作,因为实现其公共表亲所需的服务createRfcommSocketToServiceRecord()在堆栈层非常相似.
最重要的是,如果您希望保证与蓝牙实现的通用兼容性,则必须将2.3.3(API级别10)与您的应用程序对准.由于公开的API现在暴露在不安全的RFCOMM中,很难说底层私有实现是否更有可能发生变化.
这里回答的大部分答案都是在2011年3月30日之前,在这篇文章中.
在我的应用程序中寻找类似问题的解决方案时,我发现这个博客写于3月30日.
它将帮助所有仍在寻找此问题解决方案的人
http://mobisocial.stanford.edu/news/2011/03/bluetooth-reflection-and-legacy-nfc/
解决方案现在变得非常简单.只需在项目中包含InsecureBluetooth.java,然后在BluetoothChatService.java中更改2行.
tmp = InsecureBluetooth.listenUsingRfcommWithServiceRecord(mAdapter, NAME, MY_UUID, true);
Run Code Online (Sandbox Code Playgroud)
和
tmp = InsecureBluetooth.createRfcommSocketToServiceRecord(device, MY_UUID, true);
Run Code Online (Sandbox Code Playgroud)
而已 !
| 归档时间: |
|
| 查看次数: |
36105 次 |
| 最近记录: |