【问题标题】:Unsecured Bluetooth connection in AndroidAndroid中不安全的蓝牙连接
【发布时间】:2011-04-09 19:05:00
【问题描述】:

一位教授要求我在 Android 上开发一个小型蓝牙演示应用程序。我对 Android 开发一无所知,直到 2 周前他给了我这个挑战。一般来说,我对 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 编程开始。

【问题讨论】:

  • 很好的斗争,你的问题帮助我解决了我的蓝牙问题,

标签: java android bluetooth serversocket


【解决方案1】:
listenUsingInsecureRfcommWithServiceRecord()

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

如果您正在为之前的版本进行构建,这可能是问题所在。

查看docs中灰色条的右侧

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

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

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

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

【讨论】:

  • 嗯,你是对的,我正在使用 API lvl 7。无论如何,是否可以使用安全连接连接到我的鼠标?我可以将UUID.randomUUID() 发送给该方法并希望它起作用吗?
  • @AntoineG:恐怕我从来没有尝试过用蓝牙编程,所以我不知道在这种情况下可以做什么。我建议查看 v2.3.3 BlutoothAdapter 源。您总是可以尝试定义自己的扩展 BluetoothAdapter 的类并自己添加必要的方法。
  • @AntoineG:对不起 - 我刚刚意识到 BluetoothAdapter 是“最终的”,无法派生。不知道还有什么建议。
  • @AntoineG:请参阅我答案末尾的编辑。希望对您有所帮助。
  • 谢谢,这会很有帮助!
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    为了在 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 2014-02-18
      相关资源
      最近更新 更多