Как реализовать запрос на разрешение в Xamarin MvvmCross? - PullRequest
0 голосов
/ 25 сентября 2019

Я пытаюсь запросить разрешение с помощью MvvmCross, но не вижу, где я могу установить инициализации.Знаете ли вы какие-либо плагины, которые я могу вызвать в проекте .core и использовать их в каждом мобильном проекте?

Это моя модель распространения:

введите описание изображения здесь

Как видите, у меня нет класса MainActivity, вместо этого у меня есть класс Setup, и это его сборка:

>         using Core;
>         using Core.Interfaces;
>         using MvvmCross;
>         using MvvmCross.Platforms.Android.Core;
>         using Services;
>         using System.Collections.Generic;
>         using System.Linq;
>         using System.Reflection;
>     
>         public class Setup : MvxAndroidSetup<App>
>         {
>             protected override void InitializeFirstChance()
>             {
>                 Mvx.IoCProvider.RegisterType<IDialogService, DialogService>();
>     
>                 base.InitializeFirstChance();
>             }
>     
>             public override IEnumerable<Assembly> GetPluginAssemblies()
>             {
>                 var assemblies = base.GetPluginAssemblies().ToList();
>                 assemblies.Add(typeof(MvvmCross.Plugin.Visibility.Platforms.Android.Plugin).Assembly);
>                 return assemblies;
>             }
>         }
>     

А это мой класс приложения:

> using MvvmCross.IoC;
>     using MvvmCross.ViewModels;
>     using Plugin.Permissions;
>     using Plugin.Permissions.Abstractions;
>     using ViewModels;
> 
>     public class App : MvxApplication
>     {
>         public override void Initialize()
>         {
> 
>             this.CreatableTypes()
>                 .EndingWith("Service")
>                 .AsInterfaces()
>                 .RegisterAsLazySingleton();
> 
> 
> 
>             this.RegisterAppStart<GPSLocationViewModel>();
>         }
>     }

Как настроить запрос разрешений для любого компонента устройства (камеры, местоположения и т. Д.)?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

вы можете использовать пакет nuget Plugin.Permissions для запроса разрешений, см. Plugin.Permissions

0 голосов
/ 25 сентября 2019

для Android в целом, см. Обзор разрешений

для определения местоположения, см. Получить последнее известное местоположение

, например, длякамера: укажите необходимые разрешения и попросите пользователя предоставить разрешение

    [assembly: UsesPermission(Name = Android.Manifest.Permission.ReadExternalStorage)]
    [assembly: UsesPermission(Name = Android.Manifest.Permission.WriteExternalStorage)]

    ...
    ...
    ...
    public static readonly int PickImageActivityId = 91;
    public static readonly int RequestPermission_WriteExternalStorage = 92;
    static string[] Permissions = {
        Android.Manifest.Permission.ReadExternalStorage,
        Android.Manifest.Permission.WriteExternalStorage
    };

    ...

    if (FragmentController.Activity.CheckSelfPermission(Android.Manifest.Permission.WriteExternalStorage) != (int)Android.Content.PM.Permission.Granted)
        {
            FragmentController.RequestPermissions(Permissions, RequestPermission_WriteExternalStorage);
        }
        else
        {
            //already granted?
        }
    ...
    ...

ваша деятельность получит обратный вызов после того, как изображение выбрано на

    OnActivityResult(int requestCode, int resultCode, Intent data)
    {
            if (requestCode == 91)
            {
                    if ((resultCode == (int)Result.Ok))
                    {
                        //data contains image
                    }
                    return;
                }
    }
...