Xamarin.Android 使用 ParcelUuid 导致崩溃

问题描述 投票:0回答:1

我尝试在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 引起的,但我不知道为什么 如果我删除这行代码,应用程序将正常启动

xamarin.android android-bluetooth
1个回答
0
投票

好吧,我找到了解决方案,这是链接器问题,将其添加到 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>
© www.soinside.com 2019 - 2024. All rights reserved.