我有条码扫描程序谁应该使用我的应用程序。它应该在后台运行,我的应用程序以自己的方式响应来自扫描仪的输入。但是,它不应该用作硬件键盘,并且它的输入不是指向第一响应者(即没有文本条目)。目前我坚持使用它,虽然我知道我已经完成了之前描述的解决方案(几年前为一家公司)。
问题的第一部分现在是如何防止蓝牙设备作为硬件键盘连接?我可以控制这种行为,或者它可能是蓝牙设备必须支持的某种模式或设置(如果是,是否有名称可以检查规格)?
我想如果设备没有作为蓝牙键盘连接,我可以建立连接并听蓝牙套接字输入流获取可用字节并收集它们。目前我无法建立连接,因为
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
socket = device.createRfcommSocketToServiceRecord(uuid);
socket.connect();
抛出java.io.IOException
消息read failed, socket might closed or timeout, read ret: -1
。虽然设备目前与我的设备配对,但我无法连接到套接字的任何想法?
编辑: 因为有人问过,完整的连接源代码
private void initBluetooth() {
BTAdapter = BluetoothAdapter.getDefaultAdapter();
if (BTAdapter == null) {
Log.e(getClass().getName(), "no BT Adapter");
return;
}
if (!BTAdapter.isEnabled()) {
Intent enableBT = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBT, REQUEST_BLUETOOTH);
return;
}
listDevices();
}
private void listDevices() {
Set<BluetoothDevice> pairedDevices = BTAdapter.getBondedDevices();
if (pairedDevices.size() > 0) {
for (BluetoothDevice device : pairedDevices) {
Log.d(getClass().getName(), String.format("Device found %s", device.getName()));
if(device.getName().indexOf("Barcode") > 0) {
mmDevice = device;
try {
openBT();
} catch(IOException e) {
Log.e(getClass().getName(), "Failed", e);
}
break;
}
}
}
}
void openBT() throws IOException
{
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
//now make the socket connection in separate thread
Thread connectionThread = new Thread(new Runnable() {
@Override
public void run() {
// Always cancel discovery because it will slow down a connection
BTAdapter.cancelDiscovery();
// Make a connection to the BluetoothSocket
try {
// This is a blocking call and will only return on a
// successful connection or an exception
mmSocket.connect();
} catch (IOException e) {
//connection to device failed so close the socket
e.printStackTrace();
try {
mmSocket.close();
} catch (IOException e2) {
e2.printStackTrace();
}
}
}
});
connectionThread.start();
mmInputStream = mmSocket.getInputStream();
}