3

我对Android开发真的很陌生,所以我有很多问题。现在我正在尝试通过蓝牙连接两个设备。到目前为止,我能够做到这一点,我已经连接了两台平板电脑,但现在我被要求保存 LinkKey 并使用它的一些字节来创建一个 PIN。那么,我怎样才能得到那个 LinkKey?我已经读到它保存在两个设备上以供将来连接,但我不知道如何获取它。

另外,我读到这个设备可以删除那些 LinkKey,然后会发生什么?如果他们再次尝试相互连接,他们会使用相同的 LinkKey 还是创建一个新的?

最后一件事。我必须将平板电脑连接到既没有显示器也没有键盘的设备,正常的蓝牙连接就足够了吗?我这样做是为了建立连接:

final UUID MY_UUID = UUID.randomUUID();
        //tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
        Method m = null;
        try {
            m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
        } catch (NoSuchMethodException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        tmp = (BluetoothSocket) m.invoke(device, 1);
        mmSocket = tmp;


    Thread connectionThread = new Thread(new Runnable(){

    public void run() {
        // Cancel discovery because it will slow down the connection
        mBluetoothAdapter.cancelDiscovery();

        try {
            // Connect the device through the socket. This will block
            // until it succeeds or throws an exception
            mmSocket.connect();
        } catch (IOException connectException) {
            // Unable to connect; close the socket and get out
            try {
                mmSocket.close();
            } catch (IOException closeException) { }
            return;
        }

        // Do work to manage the connection (in a separate thread)
        manageConnectedSocket(mmSocket);
    }

谢谢。

4

1 回答 1

1

链接密钥创建是在堆栈/LMP(链接管理器)级别完成的,而不是在应用程序级别。蓝牙设备检查链接密钥是否存在,如果存在则不进行配对,蓝牙连接将继续,如果在蓝牙堆栈上没有找到链接密钥,LMP(链接管理器)将启动一个新的配对过程,一次配对完成,蓝牙连接将继续。如果删除链接密钥,将为连接生成一个新的链接密钥。

尝试在 adb shell (/data/misc/bluetoothddata/misc/bluetooth) 中检查链接密钥,它将在配对设备信息中可用。

于 2013-01-24T09:14:53.730 回答