我有一个连接到设备(在这种情况下是蓝牙信用卡机器)的功能,如下所示:
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()
或类似的东西。我怎样才能做到这一点?
答案 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);