要向蓝牙设备发送命令,您可以使用Android的BluetoothAdapter和BluetoothSocket类。以下是一个示例代码,演示如何向蓝牙设备发送命令:
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
public class BluetoothCommandSender {
private final BluetoothAdapter bluetoothAdapter;
private final Handler handler;
private ConnectThread connectThread;
private ConnectedThread connectedThread;
private static final UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
private static final int STATE_NONE = 0; // 无连接
private static final int STATE_CONNECTING = 1; // 连接中
private static final int STATE_CONNECTED = 2; // 已连接
private int state;
public BluetoothCommandSender(Handler handler) {
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
state = STATE_NONE;
this.handler = handler;
}
public synchronized void connect(BluetoothDevice device) {
if (state == STATE_CONNECTING) {
if (connectThread != null) {
connectThread.cancel();
connectThread = null;
}
}
if (connectedThread != null) {
connectedThread.cancel();
connectedThread = null;
}
connectThread = new ConnectThread(device);
connectThread.start();
setState(STATE_CONNECTING);
}
public synchronized void sendCommand(String command) {
if (state != STATE_CONNECTED) {
return;
}
connectedThread.write(command.getBytes());
}
private void connectionFailed() {
setState(STATE_NONE);
Message message = handler.obtainMessage(0);
Bundle bundle = new Bundle();
bundle.putString("error", "连接失败");
message.setData(bundle);
handler.sendMessage(message);
}
private void connectionLost() {
setState(STATE_NONE);
Message message = handler.obtainMessage(0);
Bundle bundle = new Bundle();
bundle.putString("error", "连接断开");
message.setData(bundle);
handler.sendMessage(message);
}
private void setState(int state) {
this.state = state;
handler.obtainMessage(0, state, -1).sendToTarget();
}
private class ConnectThread extends Thread {
private final BluetoothSocket socket;
private final BluetoothDevice device;
public ConnectThread(BluetoothDevice device) {
this.device = device;
BluetoothSocket temp = null;
try {
temp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
e.printStackTrace();
}
socket = temp;
}
public void run() {
bluetoothAdapter.cancelDiscovery();
try {
socket.connect();
} catch (IOException e) {
e.printStackTrace();
try {
socket.close();
} catch (IOException e2) {
e2.printStackTrace();
}
connectionFailed();
return;
}
synchronized (BluetoothCommandSender.this) {
connectThread = null;
}
connected(socket, device);
}
public void cancel() {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class ConnectedThread extends Thread {
private final BluetoothSocket socket;
private final InputStream inputStream;
private final OutputStream outputStream;
public ConnectedThread(BluetoothSocket socket) {
this.socket = socket;
InputStream tempIn = null;
OutputStream tempOut = null;
try {
tempIn = socket.getInputStream();
tempOut = socket.getOutputStream();
} catch (IOException e) {
e.printStackTrace();
}
inputStream = tempIn;
outputStream = tempOut;
}
public void run() {
byte[] buffer = new byte[1024];
int bytes;
while (true) {
try {
bytes = inputStream.read(buffer);
handler.obtainMessage(1, bytes, -1, buffer).sendToTarget();
} catch (IOException e) {
e.printStackTrace();
connectionLost();
break;
}
}
}
public void write(byte[] buffer) {
try {
outputStream.write(buffer);
handler.obtainMessage(2, -1, -1, buffer).sendToTarget();
} catch (IOException e) {
e.printStackTrace();
}
}
public void cancel() {
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
这是一个简