Table of Contents

XToolkit Permissions

Extended library over the Xamarin.Essentials Permissions that covered common cases of working with permissions.

Install

When you use this component separately from WhiteLabel.

You can install via NuGet: Softeq.XToolkit.Permissions

Install-Package Softeq.XToolkit.Permissions

Setup

Android

Register dependencies in platform-specific Bootstrapper:

// permissions
builder.Singleton<PermissionsService, IPermissionsService>();
builder.Singleton<PermissionsManager, IPermissionsManager>();
builder.Singleton<RequestResultHandler, IPermissionRequestHandler>();

Add Handler

IMPORTANT

This section only for WhiteLabel.Forms.Droid project.

WhiteLabel provides this functionality by default.

Add registrations to MainActivity (Forms.Droid entry point):

protected override void OnCreate(Bundle savedInstanceState)
{
    base.OnCreate(savedInstanceState);

    // ...

    Xamarin.Essentials.Platform.Init(this, savedInstanceState);

    // ...
}

public override void OnRequestPermissionsResult(
    int requestCode,
    string[] permissions,
    [GeneratedEnum] Permission[] grantResults)
{
    Dependencies.Container.Resolve<IPermissionRequestHandler>()?.Handle(requestCode, permissions, grantResults);

    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
}

iOS

Register dependencies in platform-specific Bootstrapper:

// permissions
builder.Singleton<PermissionsService, IPermissionsService>();
builder.Singleton<PermissionsManager, IPermissionsManager>();

Declare permissions

Don't forget to add permission declarations:

  • iOS: Info.plist
  • Android: AndroidManifest.xml

Using

Get IPermissionsManager from the constructor:

public class NewPageViewModel : ViewModelBase
{
    public NewPageViewModel(IPermissionsManager permissionsManager)
    {
        // ...
    }
}

Check Permission with Request

await _permissionsManager.CheckWithRequestAsync<Xamarin.Essentials.Permissions.Camera>();

Check Permission Only

await _permissionsManager.CheckAsync<Xamarin.Essentials.Permissions.Camera>();

Description

Common Contracts

Contract Implementation
IPermissionsManager iOS, Android
IPermissionsService iOS, Android
IPermissionRequestHandler Android
PermissionStatus Core

Default Platform-Specific implementation

Default implementation handles a set of predefined permissions (see below) and has additional behavior to request permissions and double-dialog check and opening application settings when the permissions are Denied.

Default implementation depends on Xamarin.Essentials.Permissions

About Xamarin.Essentials Permissions