由于默认的不能超过20字节,这里有2中解决方式
方式一:需要分段发送蓝牙消息
private static final int BUFFER_SIZE = 20; /** * 分段发送数据 * @param mess */ public void startSendData(String mess) { byte[] data = mess.getBytes(); int index = 0; int runSize = 0; int lastDataSize = 0; int length = data.length; while (index < length) { byte[] txBuffer = new byte[BUFFER_SIZE]; for (int i = 0; i < BUFFER_SIZE; i++) { if (index < length) { txBuffer[i] = data[index++]; } runSize++; try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } if (length == index) { lastDataSize = BUFFER_SIZE - (runSize - index); byte[] lastBuffer = new byte[lastDataSize]; System.arraycopy(txBuffer, 0, lastBuffer, 0, lastDataSize); // sendData(lastBuffer); 替换为自己的发送逻辑 } else { // sendData(txBuffer); 替换为自己的发送逻辑 } } }
方式二:使用一个经典蓝牙库https://codechina.csdn.net/mirrors/dingjikerbo/BluetoothKit/-/tree/master
private final BleConnectStatusListener mBleConnectStatusListener = new BleConnectStatusListener() {
@Override
public void onConnectStatusChanged(String mac, int status) {
Log.d(TAG, "onConnectStatusChanged: " + mac + " " + status);
if (status == STATUS_CONNECTED) {
重点: mClient.requestMtu(mac, 256, new BleMtuResponse() {
@Override
public void onResponse(int code, Integer data) {
if (BluetoothGatt.GATT_SUCCESS == code) {
Log.d("cyp", "onMtuChanged:设置发送数据长度成功 ");
} else {
Log.d("cyp", "onMtuChanged:设置发送数据长度失败 ");
}
}
});
} else if (status == STATUS_DISCONNECTED) {
bleDisconnect();
Log.d(TAG, "onConnectStatusChanged: 蓝牙断开");
if (mClient.isBluetoothOpened()) {
bluetoothConnected = false;
startSearch();
} else {
mClient.openBluetooth();
}
}
}
};
=====================================================================
另外有一个Android demo可供参考https://download.csdn.net/download/u013778491/20086429?spm=1001.2014.3001.5503