实现Android设备作为外围设备,并跳过配对对话框,在代码中使用registerCallback()函数并覆盖onGetPin()和onGetOobData()方法,具体示例代码如下:
private BluetoothGattServer mGattServer;
private BluetoothDevice mConnectedDevice;
// 以下是辅助函数
private void startAdvertising() {
// 创建AdvertiseSettings对象
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_BALANCED)
.setConnectable(true)
.setTimeout(0)
.build();
// 创建AdvertiseData对象,设置外围设备的名称和服务UUID
AdvertiseData data = new AdvertiseData.Builder()
.setIncludeDeviceName(true)
.addServiceUuid(new ParcelUuid(YOUR_SERVICE_UUID))
.build();
// 开始广播
BluetoothLeAdvertiser advertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
advertiser.startAdvertising(settings, data, advertisingCallback);
}
private AdvertiseCallback advertisingCallback = new AdvertiseCallback() {
@Override
public void onStartFailure(int errorCode) {
// 广播开始失败
}
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
// 广播开始成功
}
};
// 实现BluetoothGattServerCallback的onCharacteristicWriteRequest()方法,在该方法中处理接收到的数据
private BluetoothGattServerCallback gattServerCallback = new BluetoothGattServerCallback() {
@Override
public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId,
BluetoothGattCharacteristic characteristic,
boolean preparedWrite, boolean responseNeeded,
int offset, byte[] value) {
// 在这里处理接收到的数据
}
};
// 使用registerCallback()函数注册BluetoothGattServerCallback
private void startGattServer() {
BluetoothManager manager = (BluetoothManager) getSystemService(BLUETOOTH_SERVICE);
mGattServer = manager.openGattServer(this, gattServerCallback);
mGattServer.addService(YOUR_SERVICE);
}
// 覆盖BluetoothGattServerCallback的onGetPin()和onGetOobData()方法,跳过配对对话框
private BluetoothGattServerCallback gattServerCallback = new BluetoothGattServerCallback() {
@Override
public void onMtuChanged(BluetoothDevice device, int mtu) {
// MTU改变
}
@Override
public void onPhyUpdate(BluetoothDevice device, int txPhy, int rxPhy, int status) {
// PHY更新
}
@Override
public void onPhyRead(BluetoothDevice device, int txPhy, int rxPhy, int status) {
// PHY读取
}
@Override
public void onConnectionStateChange(BluetoothDevice device, int status, int newState) {
// 连接状态改变
if (newState == BluetoothProfile.STATE_CONNECTED) {
mConnectedDevice = device;
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
mConnectedDevice = null;
}
}
@Override
public void onCharacteristicReadRequest(BluetoothDevice device, int requestId, int offset, BluetoothGattCharacteristic characteristic) {
// 特征值读取
mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue());
}