Android中不安全的蓝牙连接

时间:2011-04-09 19:05:01

标签: java android bluetooth serversocket

我受到一位教授的挑战,在Android上开发了一个小型蓝牙演示应用程序。直到两周前,当他给我这个挑战时,我对Android的开发一无所知。我对Java编程也很陌生,所以我从远处开始。但无论如何......

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

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

当我阅读有关此方法的文档时,它说要使用像鼠标这样的设备打开不安全的服务器套接字,我必须使用listenUsingInsecureRfcommWithServiceRecord方法。但是当我调用它时,这个方法是不可用的,它用红色加下划线,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编程。

3 个答案:

答案 0 :(得分:4)

listenUsingInsecureRfcommWithServiceRecord()

仅适用于API级别10及更高版本,即Android v2.3.3及更高版本。

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

请参阅docs

中灰色栏的右侧

编辑:鉴于无法扩展BluetoothAdapter这一事实,listenUsingInsecureRfcommWithServiceRecord()只是这样做......

return createNewRfcommSocketAndRecord(name, uuid, false, false);

createNewRfcommSocketAndRecord()(这是BluetoothAdapter的私有方法)的源代码可以在这里找到...... createNewRfcommSocketAndRecord

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

答案 1 :(得分:0)

如果你试图与商业鼠标交谈 - 那么在Android中使用SPP套接字API将无济于事,鼠标使用HID蓝牙配置文件,它要求手机具有HID配置文件主机角色。 标准的Android版本目前不支持HID - 所以你必须自己添加它并构建android集成BlueZ的HID并将其连接到你的应用程序。

答案 2 :(得分:-1)

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

有关详情,请参阅以下链接:  链接1: http://www.sybase.com/detail?id=1064424

链接2: http://www.sybase.com/products/allproductsa-z/mobiledevicesdks/bluetoothsdks