0

我正在开发一个使用 BluetoothChat 示例应用程序的应用程序。在我的主要活动中,我使用了一个网页视图,我在其中加载了一个外部页面。我正在通过与外部页面一起加载的 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。

欢迎所有建议。

4

1 回答 1

0

我今天做到了。我建议您执行一个布尔函数 readWrite(),每当您写入 outputStream 时,您也可以从 inputStream 中读取并使用 mHandler 将 readBuffer 发送到 UI。如果读取和写入都正常,则返回 true,如果其中一个出错,则返回 false 并在关闭 ConnectedThread 之前使用 resetConection。请在此处查看我的resetConnection 答案。从 Android 4.2 更新到 Android 4.3 后,使用蓝牙 SPP 配置文件的应用程序无法正常工作

但是关于池化的答案如下:在 ConnectedThread 的 run() 方法中执行 while(true),在循环内调用类似于 readWrite(byte[] data) 的方法,首先将内容写入设备,然后从输入流(从设备)中读取数据。在这个 readWrite() 方法中,如果写入 outpustream 正常,则继续从 inputstream 读取。如果您有任何数据到输入流,请将数据发送到 UI 以使用 mHandler 进行处理(或在发送到 UI 之前进行一些处理)。

它对我来说非常好。

于 2013-09-26T18:50:51.120 回答