断开蓝牙设备

时间:2016-03-14 00:21:31

标签: android bluetooth

我有一个连接到设备(在这种情况下是蓝牙信用卡机器)的功能,如下所示:

private void pinPar(final String name, final String address) {
    MainActivity.this.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            pinpadSelected = new PinpadObject(name, address, false);
            BluetoothConnectionProvider bluetoothConnectionProvider = new BluetoothConnectionProvider(MainActivity.this, pinpadSelected);
            bluetoothConnectionProvider.setDialogMessage("Connecting to pinpad");
            bluetoothConnectionProvider.setWorkInBackground(false);
            bluetoothConnectionProvider.setConnectionCallback(new StoneCallbackInterface() {
                                                                  @Override
                                                                  public void onSuccess() {

                                                                      Toast.makeText(getApplicationContext(), "Pinpad connected", Toast.LENGTH_SHORT).show();
                                                                      out.println("Connected to " + name + " at " + address);

                                                                  }

                                                                  @Override
                                                                  public void onError() {
                                                                      Toast.makeText(getApplicationContext(), "Connection failed", Toast.LENGTH_SHORT).show();
                                                                      out.println("Failed connecting to "+ name + " at " + address);
                                                                  }
                                                              }

            );
            bluetoothConnectionProvider.execute();
        }
    });
}

我希望制作一个类似的函数,pinUnpar只关闭该连接,但bluetoothConnectionProvider没有方法close()或类似的东西。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

好吧,我有一段时间没有在android上处理过蓝牙,但是这里有。 使用蓝牙连接设备有很多不同的方法,但是我特别喜欢一种简单的方法,因为它不需要扫描你想要连接的设备,也不需要配对。它如下:

首先,您需要一个客户端和服务器都知道的公共UUID,因为在这种情况下您的服务器是蓝牙信用卡机器,您需要找出它用于连接的UUID是什么(不应该是太难了,如果它没有写在机器的手册中,那么你可以用笔记本电脑自己检测它。

客户代码: -

 BluetoothAdapter adapter;
 adapter= BluetoothAdapter.getDefaultAdapter();
 BluetoothDevice device;
 device= adapter.getRemoteDevice(serverAddress); //address here would be the address value 
 //passed to your function
 BluetoothSocket socket= device.createInsecureRfcommSocketToServiceRecord(uuid);
 //here uuid is the UUID the device uses as mentioned perviously
 socket.connect();
 OutputStream ouput=socket.getOutputStream();
 InputStream input=socket.getInputStream();

就这样,你可以连接到你的机器,你可以写任何东西并阅读任何东西。我假设你没有编程信用卡机器,所以我省略了相应的服务器代码。

由于此代码使用简单的流和套接字,因此它很容易关闭,就像它很容易打开一样。

修改: -

这仅使用Android API进行BT连接,请注意此代码使用INSECURE rfcomm,这意味着它易受MITMA和其他此类攻击的攻击。如果您不希望这样,您可以替换

device.createInsecureRfcommSocketToServiceRecord(uuid)

device.createRfcommSocketToServiceRecord(uuid);