shinyorg / shiny

.NET Framework for Backgrounding & Device Hardware Services (iOS, Android, & Catalyst)
https://shinylib.net
MIT License
1.45k stars 227 forks source link

[Bug]: Even granting all permissions to access bluetooth, the system is unable to access bluetooth #1210

Closed MichaelRodrigueess0s1 closed 1 year ago

MichaelRodrigueess0s1 commented 1 year ago

Component/Nuget

Beacons (Shiny.Beacons)

What operating system(s) are effected?

What platform(s) are effected?

Steps To Reproduce

  1. Install Shiny.Beacon package.
  2. Setup BeaconRanging and BeaconMonitoring in MauiProgram like:
s.AddBeaconRanging();
s.AddBeaconMonitoring<Delegates.MyBeaconMonitorDelegate>();

Setup Blueooth permissions in Android Manifest like:

        <!-- Permissões de Armazenamento -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- Permissões de Localização -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

    <!-- Permissões de Câmera -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" android:required="false" />
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />

    <!-- Permissões de Bluetooth -->
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-feature android:name="android.hardware.bluetooth_le" android:required="false" />

    <!-- Outras permissões -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.USE_FINGERPRINT" />
    <uses-permission android:name="com.android.vending.BILLING" />
    <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

Try run Monitoring or Ranging:

async Task Start()
        {
            try
            {
                var monitoringAccess = await this.MonitoringManager.RequestAccess();

                var scannerAccess = await RangingManager.RequestAccess();

                if (monitoringAccess == AccessState.Available)
                {
                    this.MonitoringManager.StopAllMonitoring();
                    await this.MonitoringManager.StartMonitoring(GetBeaconRegion());
                }

                if (scannerAccess == AccessState.Available)
                {
                    this.Stop();
                    await Scanner.Start(GetBeaconRegion(), RxApp.MainThreadScheduler);
                }

            }
            catch (Exception e)
            {
                Services.Dialogs.Alert(e.ToString(), "Error");
            }
        }

Expected Behavior

i'm expected with beaconRanging or monitoring start without error

Actual Behavior

The accessState is aways set up as NotSetup, and when i start monitoring ignoring the accessState i have a error like:

at Shiny.GeneralExtensions.Assert(AccessState state, String message, Boolean allowRestricted) at Shiny.Beacons.Managed.ManagedScan.Start(BeaconRegion scanRegion, IScheduler scheduler) at Evjus.App.Monitorado.V2.ViewModels.RangingBeaconPageViewModel.Start() in C:\ev\MonitoradoApp\Evjus.Monitorado.App\Evjus.App.Monitorado.V2\ViewModels\RangingBeaconPageViewModel.cs:line 47

image

Exception or Log output

The accessState is aways set up as NotSetup

Code Sample

`using Evjus.App.Monitorado.V2.Domain.Models; using Java.Util; using Shiny.Beacons; using Shiny.Beacons.Managed;

namespace Evjus.App.Monitorado.V2.ViewModels { public class RangingBeaconPageViewModel : ViewModel {

    readonly ManagedScan Scanner;
    readonly IBeaconRangingManager RangingManager;
    readonly IBeaconMonitoringManager? MonitoringManager;

    [Reactive] public bool ForMonitoring { get; private set; }
    [Reactive] public string Identifier { get; set; } = "Beacon";
    [Reactive] public string Uuid { get; set; } = "B9407F30F5F8466EAFF925556B57FE6D";
    [Reactive] public ushort Major { get; set; } = 1;
    [Reactive] public ushort Minor { get; set; } = 1;
    [Reactive] public bool NotifyOnEntry { get; set; } = true;
    [Reactive] public bool NotifyOnExit { get; set; } = true;

    public ObservableCollection<ManagedBeacon> Beacons => Scanner.Beacons;

    public RangingBeaconPageViewModel(BaseServices services, IBeaconRangingManager rangingManager,
            IBeaconMonitoringManager monitoringManager) : base(services)
    {
        MonitoringManager = monitoringManager;
        RangingManager = rangingManager;
        this.Scanner = RangingManager.CreateManagedScan();
        _ = Start();
    }

    BeaconRegion GetBeaconRegion() => new BeaconRegion(this.Identifier, Guid.Parse(this.Uuid), Major, Minor)
    {
        NotifyOnEntry = this.NotifyOnEntry,
        NotifyOnExit = this.NotifyOnExit
    };

    async Task Start()
    {
        try
        {
            var monitoringAccess = await this.MonitoringManager.RequestAccess();

            var scannerAccess = await RangingManager.RequestAccess();

            if (monitoringAccess == AccessState.Available)
            {
                this.MonitoringManager.StopAllMonitoring();
                await this.MonitoringManager.StartMonitoring(GetBeaconRegion());
            }

            if (scannerAccess == AccessState.Available)
            {
                this.Stop();
                await Scanner.Start(GetBeaconRegion(), RxApp.MainThreadScheduler);
            }

        }
        catch (Exception e)
        {
            Services.Dialogs.Alert(e.ToString(), "Error");
        }
    }

    void StartScan()
    {

    }

    void Stop()
    {
        Scanner.Stop();
        Scanner.Beacons.Clear();
    }
}

}

`

Code of Conduct

aritchie commented 1 year ago
  • [X] I am using the latest sable version from nuget (sponsors can discuss previews in discord)

FOLLOW the code of conduct! I am not supporting alphas. You can wait or contribute. Try the samples because they work fine