Android 加载应用程序时询问运行时权限

Android 加载应用程序时询问运行时权限,android,xamarin,xamarin.forms,Android,Xamarin,Xamarin.forms,我想在应用程序启动/加载时读取一个文件。我已经编写了代码来请求MainActivity的OnStart方法的许可 但上面的代码执行得太晚了,在MainPageViewModel中执行文件读取之前,并在询问权限显示弹出框之后引发异常 在MainViewModel的构造函数中读取文件代码 public MainPageViewModel() { GetValues(); } public static void GetValues() { try { stri

我想在应用程序启动/加载时读取一个文件。我已经编写了代码来请求MainActivity的OnStart方法的许可

但上面的代码执行得太晚了,在MainPageViewModel中执行文件读取之前,并在询问权限显示弹出框之后引发异常

在MainViewModel的构造函数中读取文件代码

public MainPageViewModel()
{
    GetValues();
}
public static void GetValues()
{
    try
    {
        string dataFolderPath = DependencyService.Get<IDataHelper>().DataFolderPath;
        XmlDocument doc = new XmlDocument();
        doc.Load(dataFolderPath);
        XmlNode node = doc.DocumentElement.SelectSingleNode("/obj/credentials");
        _userName = node.Attributes["userName"].Value;
        _userPassword = node.Attributes["password"].Value;
        _tenantCode = node.Attributes["Code"].Value;
        _host = node.Attributes["host"].Value;
    }
    catch (Exception ex)
    {

    }
}

如何首先授予权限并执行后续代码?

尝试使用android library DEXTER获得运行时应用程序权限,或者您可以硬编码它。并尝试在onCreate方法中获取应用权限。

修改您的函数

public MainPageViewModel()
{
GetValues();
}

你也可以使用

ContextCompat.CheckSelfPermission(Context, permission) == (int) Permission.Granted.
每次访问权限相关操作之前都要检查权限

使用此插件:

检查权限:

PermissionStatus status = await CrossPermissions.Current.CheckPermissionStatusAsync<CalendarPermission>();
PermissionStatus status = await CrossPermissions.Current.RequestPermissionAsync<CalendarPermission>();
请求许可:

PermissionStatus status = await CrossPermissions.Current.CheckPermissionStatusAsync<CalendarPermission>();
PermissionStatus status = await CrossPermissions.Current.RequestPermissionAsync<CalendarPermission>();

onStart中调用的请求方法。它不会等待openoncreate。所以,在权限接受回调后初始化视图模型。我在第二句话中并没有理解你们的意思。谢谢。只有在您有权限的情况下才初始化MainPageViewModel。我想告诉您,当权限被接受时,初始化/调用您的viewmodel类。当您调用ActivityCompat.RequestPermissions时,您将收到一个回调,显示您的权限是否已授予。然后,您将初始化/调用您的viemodel。谢谢您的回答,但我认为我无法在我的ViewModel中编写Android代码,因为这是xamarin.forms的共享代码项目。@r15但您可以将上下文或任何内容传递给构造函数/作为参数传递给方法,这将满足您的需要并检查我更新的答案。