android蓝牙接收实时显示,求助:蓝牙接收单片机温度数据在TextView中不能实时显示...
时间: 2023-11-22 19:53:54 浏览: 76
要实现实时显示,可以使用 Handler 或者 AsyncTask 来更新 TextView 的内容。下面是使用 Handler 的示例代码:
```java
public class MainActivity extends AppCompatActivity {
private TextView mTextView;
private BluetoothSocket mSocket;
private InputStream mInputStream;
private Handler mHandler;
private static final int MESSAGE_READ = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text_view);
mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
if (msg.what == MESSAGE_READ) {
String data = (String) msg.obj;
mTextView.setText(data);
}
}
};
new Thread(new Runnable() {
@Override
public void run() {
try {
// 连接蓝牙设备的代码
mSocket = ...;
mInputStream = mSocket.getInputStream();
byte[] buffer = new byte[1024];
int bytes;
while (true) {
bytes = mInputStream.read(buffer);
String data = new String(buffer, 0, bytes);
mHandler.obtainMessage(MESSAGE_READ, data).sendToTarget();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
```
在上面的代码中,我们创建了一个 Handler 对象,并在主线程中调用了 `handleMessage()` 方法来更新 TextView 的内容。然后在另一个线程中,我们从 BluetoothSocket 的 InputStream 中读取数据,并使用 Handler 发送消息来更新 TextView 的内容。这样就可以实现实时显示了。
需要注意的是,由于读取 InputStream 的代码是在另一个线程中执行的,因此在更新 UI 的时候需要使用 Handler 或者 AsyncTask 来保证线程安全。
阅读全文