C# 如何在xamarin.forms中一次显示多个权限?

C# 如何在xamarin.forms中一次显示多个权限?,c#,plugins,xamarin.forms,cross-platform,android-permissions,C#,Plugins,Xamarin.forms,Cross Platform,Android Permissions,我想在应用程序启动时或启动屏幕后显示相机和位置的运行时权限弹出窗口 我正在使用NuGet软件包: 我已经在按钮点击事件中尝试了下面的代码 private async void Button_Clicked(object sender, EventArgs e) { await GetPermissions(); } public static async Task<bool> GetPermissions() { bool

我想在应用程序启动时或启动屏幕后显示相机和位置的运行时权限弹出窗口

我正在使用NuGet软件包:

我已经在按钮点击事件中尝试了下面的代码

private async void Button_Clicked(object sender, EventArgs e)
    {
        await GetPermissions();
    }


public static async Task<bool> GetPermissions()
    {
        bool permissionsGranted = true;

        var permissionsStartList = new List<Permission>()
        {
            Permission.Location,
            Permission.LocationAlways,
            Permission.LocationWhenInUse,
            Permission.Storage,
            Permission.Camera
        };

        var permissionsNeededList = new List<Permission>();
        try
        {
            foreach (var permission in permissionsStartList)
            {
                var status = await CrossPermissions.Current.CheckPermissionStatusAsync(permission);
                if (status != PermissionStatus.Granted)
                {
                    permissionsNeededList.Add(permission);
                }
            }
        }
        catch (Exception ex)
        {
        }

        var results = await CrossPermissions.Current.RequestPermissionsAsync(permissionsNeededList.ToArray());

        try
        {
            foreach (var permission in permissionsNeededList)
            {
                var status = PermissionStatus.Unknown;
                //Best practice to always check that the key exists
                if (results.ContainsKey(permission))
                    status = results[permission];
                if (status == PermissionStatus.Granted || status == PermissionStatus.Unknown)
                {
                    permissionsGranted = true;
                }
                else
                {
                    permissionsGranted = false;
                    break;
                }
            }
        }
        catch (Exception ex)
        {
        }
        return permissionsGranted;
    }
private async void按钮\u已单击(对象发送方,事件参数e)
{
等待GetPermissions();
}
公共静态异步任务GetPermissions()
{
bool permissionsGranted=true;
var permissionsStartList=新列表()
{
许可,地点,
Permission.location始终,
Permission.location在使用时,
许可,储存,
允许,摄像机
};
var PermissionsNeedList=新列表();
尝试
{
foreach(permissionsStartList中的var权限)
{
var status=await CrossPermissions.Current.CheckPermissionStatusAsync(权限);
if(status!=PermissionStatus.grated)
{
PermissionsNeedList.Add(权限);
}
}
}
捕获(例外情况除外)
{
}
var results=await CrossPermissions.Current.RequestPermissionsAsync(permissionsNeedList.ToArray());
尝试
{
foreach(权限需求列表中的var权限)
{
var状态=许可状态。未知;
//始终检查密钥是否存在的最佳实践
if(结果。容器(许可))
状态=结果[权限];
如果(状态==PermissionStatus.grated | |状态==PermissionStatus.Unknown)
{
permissionsGranted=真;
}
其他的
{
permissionsGranted=false;
打破
}
}
}
捕获(例外情况除外)
{
}
返回许可证;
}
请给出您的建议或更好的方法

我想在运行时显示相机和位置的运行时权限弹出窗口 应用程序启动或在启动屏幕后启动

如果您想在
应用程序启动时或启动屏幕后弹出相机和位置的权限弹出窗口

您可以在主页的
OnAppearing()
中调用
GetPermissions
方法:

public partial class MainPage : ContentPage
{
    public MainPage()
    {
        InitializeComponent();
    }

    protected override async void OnAppearing()
    {
        base.OnAppearing();

        bool a = await GetPermissions();
    }

    public static async Task<bool> GetPermissions()
    {
        ....
    }
}
public分部类主页面:ContentPage
{
公共主页()
{
初始化组件();
}
受保护的重写异步void OnAppearing()
{
base.OnAppearing();
bool a=等待获取权限();
}
公共静态异步任务GetPermissions()
{
....
}
}
注意:

  • 如上所述,当您安装
    PermissionsPlugin
    时,它还将在您的Android应用程序中安装一个名为“
    MainApplication.cs
    ”的文件

  • 并确保已选择
    读取外部存储
    写入外部存储
    ACCESS\u rough\u LOCATION
    ACCESS\u FINE\u LOCATION
    权限通过右键单击
    xxxx.Android
    项目-->
    属性-->
    Android Mainfest
    -->
    所需权限


  • 我已经上传了一个,你可以查看。让我知道它是否有效。

    只需在
    主线程上逐个排列它们,您应该很好。我对Xamarin相当陌生,因此如果您能提供示例代码,那就太好了。您解决了问题还是尝试了我的解决方案?