[英]Bluetooth LE send string data between Android devices via application
[英]Send data between 2 devices using Bluetooth in Android
我正在開發一個應用程序,您可以在其中將帶有藍牙的對象的arrayList發送到另一台設備。 由於這是我的新手,我已經能夠配對兩個設備,但是我無法發送內容。 我遵循了谷歌指南,但是我很難理解它。 這是代碼:
public class ServerThread implements Runnable {
private final BluetoothServerSocket serverSocket;
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
private final String APPNAME = "Quick";
private final java.util.UUID UUID = java.util.UUID.fromString("aeeb5480-1c74-45e2-bfd0-f592958cba2a");
private Handler handler;
public ServerThread(Handler handler) {
this.handler = handler;
BluetoothServerSocket tmp = null;
try {
tmp = bluetoothAdapter.listenUsingRfcommWithServiceRecord(APPNAME, UUID);
} catch (IOException e) {
}
serverSocket = tmp;
}
@Override
public void run() {
BluetoothSocket socket;
while (true) {
try {
BluetoothSocket tmp;
tmp = serverSocket.accept();
socket = tmp;
} catch (IOException e) {
break;
}
if (socket != null) {
}
}
}
}
。
public class ClientThread implements Runnable {
private static final UUID UUID = java.util.UUID.fromString("aeeb5480-1c74-45e2-bfd0-f592958cba2a");
private static BluetoothSocket socket;
BluetoothDevice device;
private Handler handler;
public ClientThread(BluetoothDevice device, Handler handler) {
this.handler = handler;
BluetoothSocket tmp = null;
this.device = device;
try {
tmp = device.createRfcommSocketToServiceRecord(UUID);
} catch (IOException e) {
e.printStackTrace();
}
socket = tmp;
}
@Override
public void run() {
if (BluetoothAdapter.getDefaultAdapter().isDiscovering()) {
BluetoothAdapter.getDefaultAdapter().cancelDiscovery();
}
try {
socket.connect();
} catch (IOException e) {
try {
socket.close();
} catch (IOException e1) {
}
return;
}
}
public static BluetoothSocket getSocket() {
return socket;
}
}
問題是我不知道如何在設備之間傳輸數據,以及我在哪里需要調用允許我執行此操作的方法。 如果有人可以幫助我,那就太好了。 謝謝
一旦獲得了服務器端BluetoothSocket,在accept()例程和客戶端的connect()方法之后,就可以開始設備之間的通信了。 為此,您需要在客戶端和服務器端都鏈接到套接字的InputStream和Outputstream對象:只需使用BluetoothSocket方法getInputStream()和getOutputStream即可獲取它們。 使用OutputStream將數據寫入通信的另一端(通過write(byte [])方法)和InputStream read()方法(如果我沒記錯的話,有3種)來收集接收到的數據。
您可能已經想象到,藍牙通信由字節流組成; 您不能直接發送復雜的對象,但是必須在發送之前分解它們,並在接收之后重新組合它們,因此由您來實現對arraylist對象的解析例程由您決定。
[ 編輯 :使用java.io,您實際上可以發送復雜的“對象”; Reader和Writer用於發送/接收字符串,而FileInputStream和FileOutputStream用於交換文件。 您甚至可以序列化對象並通過Stream發送它們。 我的答案缺乏經驗,因此請注意,存在可以簡化數據交換例程的解決方案; 只需看看java.io庫即可。]
我還建議您查看所有可以同時在Android Bluetooth API和Bluetooth體系結構上找到的所有文檔,以開發強大的應用程序! 藍牙可能很棘手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.