我正在尋找Android上的藍牙示例代碼來做非阻塞套接字通信。Android的藍牙插座教程無阻塞通信
我發現了幾個例子,像BluetoothChat或BluetoothSocket.java但都不是non-blocking socket communication.
PS不會自動無阻塞的意思就是必須是異步的?我認爲其實不是 - 它是不一樣的,我認爲我可以做超時同步套接字通信。這就是我正在尋找的...樣的榜樣
非常感謝您
我正在尋找Android上的藍牙示例代碼來做非阻塞套接字通信。Android的藍牙插座教程無阻塞通信
我發現了幾個例子,像BluetoothChat或BluetoothSocket.java但都不是non-blocking socket communication.
PS不會自動無阻塞的意思就是必須是異步的?我認爲其實不是 - 它是不一樣的,我認爲我可以做超時同步套接字通信。這就是我正在尋找的...樣的榜樣
非常感謝您
貌似答案是幾乎不能
但是有位穿魔法的,你可以有系統的工作方式你想
BluetoothSocketListener bsl = new BluetoothSocketListener(socket, handler, messageText);
Thread messageListener = new Thread(bsl);
messageListener.start();
消息系統
private class MessagePoster implements Runnable {
private TextView textView;
private String message;
public MessagePoster(TextView textView, String message) {
this.textView = textView;
this.message = message;
}
public void run() {
textView.setText(message);
}
}
插座聽衆
private class BluetoothSocketListener implements Runnable {
private BluetoothSocket socket;
private TextView textView;
private Handler handler;
public BluetoothSocketListener(BluetoothSocket socket,
Handler handler, TextView textView) {
this.socket = socket;
this.textView = textView;
this.handler = handler;
}
public void run() {
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
try {
InputStream instream = socket.getInputStream();
int bytesRead = -1;
String message = "";
while (true) {
message = "";
bytesRead = instream.read(buffer);
if (bytesRead != -1) {
while ((bytesRead==bufferSize)&&(buffer[bufferSize-1] != 0)) {
message = message + new String(buffer, 0, bytesRead);
bytesRead = instream.read(buffer);
}
message = message + new String(buffer, 0, bytesRead - 1);
handler.post(new MessagePoster(textView, message));
socket.getInputStream();
}
}
} catch (IOException e) {
Log.d("BLUETOOTH_COMMS", e.getMessage());
}
}
}
我應該提到這是「專業Android 2應用程序開發」作者:Reto Meier – morty346
僅供參考,我實際上實現了非阻塞並使用兩個獨立的定時器自行超時。有一次,如果它在最短時間內沒有收到任何東西,並且第二個定時器用於定義循環等待數據的最長時間,則存在等待的BT循環。這樣我終於可以控制溝通 – user387184
我在找同樣的東西,如果你找到解決方案請更新答案,我會做同樣的! – morty346