我尝试在android上制作BLE服务器
try
{
_bluetoothManager = (BluetoothManager)ctx.GetSystemService(Context.BluetoothService);
_bluetoothAdapter = _bluetoothManager.Adapter;
_bluettothServerCallback = new BleGattServerCallback();
_bluetoothServer = _bluetoothManager.OpenGattServer(ctx, _bluettothServerCallback);
var service = new BluetoothGattService(UUID.FromString("ffe0ecd2-3d16-4f8d-90de-e89e7fc396a5"),
GattServiceType.Primary);
_characteristic = new BluetoothGattCharacteristic(UUID.FromString("d8de624e-140f-4a22-8594-e2216b84a5f2"), GattProperty.Read | GattProperty.Notify | GattProperty.Write, GattPermission.Read | GattPermission.Write);
_characteristic.AddDescriptor(new BluetoothGattDescriptor(UUID.FromString("28765900-7498-4bd4-aa9e-46c4a4fb7b07"),
GattDescriptorPermission.Read | GattDescriptorPermission.Write));
service.AddCharacteristic(_characteristic);
_bluetoothServer.AddService(service);
_bluettothServerCallback.CharacteristicReadRequest += _bluettothServerCallback_CharacteristicReadRequest;
_bluettothServerCallback.NotificationSent += _bluettothServerCallback_NotificationSent;
Debug.WriteLine("Server created!");
BluetoothLeAdvertiser myBluetoothLeAdvertiser = _bluetoothAdapter.BluetoothLeAdvertiser;
var builder = new AdvertiseSettings.Builder();
builder.SetAdvertiseMode(AdvertiseMode.Balanced);
builder.SetConnectable(true);
builder.SetTimeout(0);
builder.SetTxPowerLevel(AdvertiseTx.PowerMedium);
AdvertiseData.Builder dataBuilder = new AdvertiseData.Builder();
dataBuilder.SetIncludeDeviceName(true);
dataBuilder.AddServiceUuid(new ParcelUuid(UUID.FromString("ffe0ecd2-3d16-4f8d-90de-e89e7fc396a5")));
dataBuilder.SetIncludeTxPowerLevel(true);
myBluetoothLeAdvertiser.StartAdvertising(builder.Build(), dataBuilder.Build(), new BleAdvertiseCallback());
}
catch (Exception e)
{
Debug.WriteLine(e);
throw;
}
但是当我添加这行代码时
dataBuilder.AddServiceUuid(new ParcelUuid(UUID.FromString("ffe0ecd2-3d16-4f8d-90de-e89e7fc396a5")));
应用程序不想启动,并且我在控制台中没有任何有用的信息为什么它会发生
我尝试修改此代码并了解该问题是由 ParcelUuid 引起的,但我不知道为什么 如果我删除这行代码,应用程序将正常启动
好吧,我找到了解决方案,这是链接器问题,将其添加到 LinkDescription 后,它开始工作。 关于链接器描述:https://learn.microsoft.com/uk-ua/xamarin/cross-platform/deploy-test/linker
<?xml version="1.0" encoding="utf-8"?>
<linker>
<assembly fullname="Mono.Android">
<type fullname="Java.Interop.TypeManager" preserve="all" />
</assembly>
</linker>