我正在开发一个使用BluetoothChat示例应用程序的应用程序。 在我的主要活动中,我正在使用webview,在其中加载外部页面。我正在通过加载外部页面的JavaScript来处理蓝牙功能。基本上我通过以下行在Javascript和本机代码之间添加一个桥梁:
myWebView.addJavascriptInterface(new WebAppInterface(this,myWebView), "Android");//I pass a refference to the context and a refference to the webview.
WebAppInterface是具有我可以从Javascript调用的所有公共方法的类。在这个课程中,我有以下方法:enableBluetooth,disableBluetooth,listBoundedDevices,connect等。
我正在使用BluetoothChat示例应用程序中的BluetoothSerialService类。我的设备必须连接到嵌入式设备,该设备根据我提供的输入接收不同的命令和答案。例如:当我按下webview上的按钮时,我会调用以下本机代码:
while(true){
out.write(requestKey);//send command - where "out" is the OutputStream
key = in.read();//get response - where "in" is the InputStream
if(key==KEY1){
out.write(activateRFID);//send command - activateRFID
rfidTag = in.read();//get response - RFID Tag
updateUI(rfidTag);//perform function - update the UI with the tag
}
else if(key==KEY2){
out.write(deactivateRFID);//send command - deactivate RFID
response = in.read();//get response
}
else if(key==KEY3){
out.write(anotherCommand);//send command -
response = in.read();//get response
}
}
我想要实现的是将命令发送到另一个设备(请求按下的键)并执行功能。这必须始终发生(将按下的键集合在一起并执行特定功能)。
如何启动1个汇集设备的SINGLE THREAD(写入OutputStream并从InputStream读取响应)? BluetoothChat示例应用程序的工作方式略有不同:每当我调用BluetoothChatSevice.write()时,我都会通过ConnectedThread运行方法获得响应,该方法通过mHandler向UI发送消息。
欢迎所有建议。
答案 0 :(得分:0)
但关于汇集的答案如下: 在ConnectedThread run()方法做一会儿(true),在循环内调用一个类似于readWrite(byte []数据)的方法,首先你在设备上写东西,然后你从中读取数据输入流(来自设备)。在这个readWrite()方法中,如果写入outpustream很好,那么继续从输入流中读取。如果您有任何数据到输入流,请将数据发送到UI以便使用mHandler进行处理(或者在发送到UI之前进行一些处理)。
对我来说非常好。