Java Android中不安全的蓝牙连接

Java Android中不安全的蓝牙连接,java,android,bluetooth,serversocket,Java,Android,Bluetooth,Serversocket,一位教授向我提出挑战,要求我在Android上开发一款小型蓝牙演示应用程序。直到两周前,当他给我那个挑战时,我才知道Android的开发。一般来说,我对Java编程也很陌生,所以我从很远的地方开始。但无论如何 所以我完成了大部分教程,阅读了Android中的蓝牙,查看了蓝牙聊天示例代码,现在我正在尝试制作我的小应用程序。因此,对于我的演示,我将尝试在我的真实手机和蓝牙鼠标之间建立连接。我想在手机屏幕上移动一个形状,以响应我的鼠标移动 我遇到了很多问题,但到目前为止,我的主要问题是用我的不安全鼠标

一位教授向我提出挑战,要求我在Android上开发一款小型蓝牙演示应用程序。直到两周前,当他给我那个挑战时,我才知道Android的开发。一般来说,我对Java编程也很陌生,所以我从很远的地方开始。但无论如何

所以我完成了大部分教程,阅读了Android中的蓝牙,查看了蓝牙聊天示例代码,现在我正在尝试制作我的小应用程序。因此,对于我的演示,我将尝试在我的真实手机和蓝牙鼠标之间建立连接。我想在手机屏幕上移动一个形状,以响应我的鼠标移动

我遇到了很多问题,但到目前为止,我的主要问题是用我的不安全鼠标打开插座。当我尝试使用listenUsingRfcommWithServiceRecord方法时,它会请求UUID作为参数。但是我的鼠标很可能没有UUID来响应,所以我猜这个方法不是好方法

当我阅读有关此方法的文档时,它说要用鼠标之类的设备打开不安全的服务器套接字,我必须使用
listenusingsecurerfcommwithservicecerecord
方法。但是当我调用它时,这个方法是不可用的,它用红色下划线,Eclipse说它对于BluetoothAdapter类型是未定义的

private BluetoothServerSocket connectDevice(BluetoothAdapter adapter, BluetoothDevice device){
    BluetoothServerSocket socket = null;
    try{
        socket = adapter.listenUsingInsecureRfcommWithServiceRecord(device.getName(), UUID.randomUUID());
    }
    catch(IOException e){
        Toast.makeText(this, "Connection failed.\n" + e.getMessage(), Toast.LENGTH_SHORT);
    }

    return socket;
}
如果我做错了,请不要责备我,这是我的第一个问题,我从Java编程开始

listenUsingInsecureRfcommWithServiceRecord()
这仅适用于API级别10及更高版本,即Android v2.3.3及更高版本

如果您正在为之前的版本构建,那么这可能就是问题所在

请参见中灰色条的右侧

编辑:鉴于无法扩展BluetoothAdapter,
listenusingSecureRFCommWithServiceRecord()
只需执行此操作

return createNewRfcommSocketAndRecord(name, uuid, false, false);
createNewRfcommSocketAndRecord()的源代码(这是BluetoothAdapter的私有方法),可以在这里找到


不确定是否会有帮助,但您可能能够重现其功能。

如果您试图与商用鼠标通话,则在android中使用SPP套接字API将无济于事,鼠标使用HID蓝牙模式,并且需要手机具有HID模式主机角色。
标准android版本目前不支持HID-因此您必须自己添加HID,并构建android集成BlueZ的HID并将其连接到您的应用程序。

要在android上实现蓝牙配置文件支持,有一个名为“Sybase iAnywhere Blue SDK For android”的项目,该项目将取代android版本,并为底层蓝牙配置文件和协议提供所有接口。使用此功能,可以使用此SDK提供的BPP配置文件使用Android手机通过蓝牙进行打印

有关详细信息,请参阅以下链接: 链接1:

链接2:

呃,你说得对,我使用的是API 7级。是否仍然可以使用安全连接连接到我的鼠标?我可以将
UUID.randomuid()
发送到该方法并希望它能工作吗?@antoieng:恐怕我从未尝试过使用蓝牙编程,所以我不知道在这种情况下可以做什么。我建议看一下v2.3.3的源代码。您可以尝试定义自己的扩展BluetoothAdapter的类,并自己添加必要的方法。@Antoieng:对不起-我刚刚意识到BluetoothAdapter是“final”的,不能从中派生。不知道还有什么好建议。@Antoieng:请看我答案末尾的编辑。希望有帮助。谢谢,那会很有帮助的!很好的斗争,你的问题帮助我解决了蓝牙问题,