如何使用android蓝牙聊天示例应用程序实现池化?

时间:2013-08-20 09:15:22

标签: android multithreading bluetooth

我正在开发一个使用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发送消息。

欢迎所有建议。

1 个答案:

答案 0 :(得分:0)

我今天做到了。我建议你做一个布尔函数readWrite(),每当你写入outputStream时,你也会从inputStream中读取并使用mHandler将readBuffer发送到UI。如果读取和写入都正常,则返回true,如果其中一个出错而不是返回false并在关闭ConnectedThread之前使用resetConection。有关resetConnection,请参阅此处的答案。 Application using bluetooth SPP profile not working after update from Android 4.2 to Android 4.3

但关于汇集的答案如下: 在ConnectedThread run()方法做一会儿(true),在循环内调用一个类似于readWrite(byte []数据)的方法,首先你在设备上写东西,然后你从中读取数据输入流(来自设备)。在这个readWrite()方法中,如果写入outpustream很好,那么继续从输入流中读取。如果您有任何数据到输入流,请将数据发送到UI以便使用mHandler进行处理(或者在发送到UI之前进行一些处理)。

对我来说非常好。