Плагин BLE, показывающий необработанное исключение .NET MAUI

Я пытаюсь разработать приложение для подключения устройств с помощью Bluetooth, для этой цели я использую Plugin.BLE, но оно показывает какое-то необработанное исключение.

AndroidManifest.xml

<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "http://schemas.android.com/apk/res/android">
    <application android:allowBackup = "true" android:supportsRtl = "true"></application>
    <uses-permission android:name = "android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name = "android.permission.INTERNET" />
    <uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name = "android.permission.BLUETOOTH" />
    <uses-permission android:name = "android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name = "android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name = "android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name = "android.permission.BLUETOOTH_CONNECT" />

</manifest>

scanPage.xaml.cs

using Plugin.BLE;
using Plugin.BLE.Abstractions;
using Plugin.BLE.Abstractions.Contracts;
using Plugin.BLE.Abstractions.EventArgs;
using Plugin.BLE.Abstractions.Extensions;
using System;
using System.Text;
using System.Threading;


namespace sampleApp;

public partial class scanPage : ContentPage
{

    private CancellationToken cancellationToken;
    public scanPage()
    {
        InitializeComponent();
   
    }


    private async void scanBtn_Clicked(object sender, EventArgs e)
    {
        var adapter = CrossBluetoothLE.Current.Adapter;
        var systemDevices = adapter.GetSystemConnectedOrPairedDevices();

        var filteredDevices = systemDevices.Where(device => device.Name != null).ToList();

        ScanFilterOptions filterOptions = new ScanFilterOptions();
        // Create a list to hold device names for display
        var deviceList = filteredDevices.Select(device => device.Name);
        var deviceNames = deviceList.ToList();

        var device = systemDevices[0];
        try
        {
           Guid service_id = filterOptions.ServiceUuids[0];
                                
           Guid serviceUUID = service_id;

            var charUUID = Guid.Parse("00002A00-0000-1000-8000-00805f9b34fb");
            await adapter.ConnectToKnownDeviceAsync(serviceUUID);

            await SendDataToDevice(device, serviceUUID, charUUID);

            await DisplayAlert("Success", $"Connected to {device}!", "Ok");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Exception", $"{ex.Message}", "Ok");
        }
    }
    private async Task SendDataToDevice(IDevice device, object serviceUuid, object characteristicUuid)
    {
        try
        {
            // Get the service and characteristic
            var service = await device.GetServiceAsync((Guid)serviceUuid);
            var characteristic = await service.GetCharacteristicAsync((Guid)characteristicUuid);

            // Your message to send
            string message = "Hello World from Xamarin.Forms!";

            // Convert message to byte array (replace with your encoding if needed)
            byte[] messageBuffer = Encoding.ASCII.GetBytes(message);

            // Write data to the characteristic
            await characteristic.WriteAsync(messageBuffer);

            await DisplayAlert("Sent", "Message sent successfully!", "Ok");
        }
        catch (Exception ex)
        {
            await DisplayAlert("Error", ex.Message, "Ok");
        }
    }
    private async void ListDataItem(object sender, SelectedItemChangedEventArgs e)
    {
        if (e.SelectedItem == null)
        {
            return; // No item selected, ignore
        }
        var selectedDeviceName = e.SelectedItem.ToString();

        // Handle device selection here (e.g., display alert or perform an action)
        await DisplayAlert("Selected Device", $"You selected: {selectedDeviceName}", "Ok");
    }
}

scanPage.xaml

<?xml version = "1.0" encoding = "utf-8" ?>
<ContentPage xmlns = "http://schemas.microsoft.com/dotnet/2021/maui"
             xmlns:x = "http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class = "sampleApp.scanPage"
             Title = "scanPage">
    <VerticalStackLayout HorizontalOptions = "Center" VerticalOptions = "Center" Spacing = "50">
        <Label 
            Text = "Welcome to .NET MAUI!"
            VerticalOptions = "Center" 
            HorizontalOptions = "Center" />

        <Button x:Name = "scanBtn" Text = "Scan now" Clicked = "scanBtn_Clicked"/>
    </VerticalStackLayout>
</ContentPage>

Я сталкиваюсь со следующим исключением

Java.Lang.SecurityException: «Требуется разрешение android.permission.BLUETOOTH_CONNECT для android.content.AttributionSource@c82fb2a4: GattService getDevicesMatchingConnectionStates»

Я также добавил конкретную зависимость, но получаю это исключение.

Помощь оценена по достоинству!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
170
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Java.Lang.SecurityException: 'Нужно Разрешение android.permission.BLUETOOTH_CONNECT для android.content.AttributionSource@c82fb2a4: GattService getDevicesMatchingConnectionStates'

Начиная с Android 6.0, не каждое разрешение предоставляется только потому, что оно размещено в манифесте. Нам нужно обрабатывать разрешение выполнения во время выполнения. Чтобы узнать, как запросить разрешения времени выполнения, вы можете проверить: Запросить разрешения времени выполнения.

А в документе Плагин Bluetooth LE для Xamarin & MAUI мы можем найти следующее:

Для Android 12 и более поздних версий может потребоваться одно или несколько из следующих действий. дополнительные runtime permissions в зависимости от особенностей используемую вами библиотеку (см. разрешения Android Bluetooth документация)

<uses-permission android:name = "android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name = "android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name = "android.permission.BLUETOOTH_ADVERTISE" />

Примечание:

На Мауи вы можете использовать Разрешения, чтобы проверить и запросить разрешение на выполнение.

Простой ссылки на документ, в котором объясняется, как запросить разрешения, недостаточно для ответа, вам следует включить пример непосредственно в свой ответ.

Julian 29.04.2024 13:36

Спасибо, это сработало, но теперь показывает исключение, а именно: ссылка на объект не установлена ​​на экземпляр объекта.

Shubhankar Pande 29.04.2024 14:40

@Джулиан Не могли бы вы помочь мне с этим исключением?

Shubhankar Pande 29.04.2024 14:58

@ShubhankarPande Если вы столкнулись с новой проблемой, вам, вероятно, следует задать другой, отдельный вопрос, включающий необходимые подробности. Если исключение, которое вы видите сейчас, по-прежнему напрямую связано с вашим исходным вопросом, вам следует обновить вопрос.

Julian 29.04.2024 15:47

Привет @ShubhankarPande, Thanks, it worked but now it is showing exception namely -- Object reference not set to an instance of an object Это должна быть еще одна проблема. Одна проблема, одна тема. Для новой проблемы вы можете создать новую тему для новой проблемы. Мы все готовы помочь вам. :)

Jessie Zhang -MSFT 30.04.2024 04:03

@JessieZhang-MSFT Я создам еще одну тему для решения этой проблемы.

Shubhankar Pande 30.04.2024 08:55

Другие вопросы по теме