如何在 Xamarin MvvmCross 中实现权限请求?

How to implement Permission request in Xamarin MvvmCross?

我正在尝试使用 MvvmCross 请求许可,但我看不到在哪里可以设置初始化。您知道我可以在 .core 项目中调用并在每个移动项目中使用的插件吗?

这是我的模型分布:

enter image description here

你怎么看,我没有任何 MainActivity class,相反,我有一个 Setup class,这是他的构建:

>         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;
>             }
>         }
>     

这是我的应用程序 class:

> 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>();
>         }
>     }

如何为任何设备组件(相机、位置等)设置权限请求?

对于android一般来说,请参阅Permissions overview

位置请见Get the last known location

例如,对于相机:指定所需的权限并要求用户授予权限

    [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?
        }
    ...
    ...

您的 activity 将在

上选择图片后收到回调
    OnActivityResult(int requestCode, int resultCode, Intent data)
    {
            if (requestCode == 91)
            {
                    if ((resultCode == (int)Result.Ok))
                    {
                        //data contains image
                    }
                    return;
                }
    }

您可以使用 nugetpackage Plugin.Permissions 来请求权限, 参考Plugin.Permissions