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

时间:2019-08-20 06:34:53

标签: android xamarin xamarin.forms

我想在应用启动/加载时读取一个文件。我已经编写了代码,要求获得MainActivity的{​​{1}}方法的许可

OnStart

但是在执行文件读取之前(在MainPageViewModel中)并在请求权限之后抛出异常(显示弹出框),上述代码变得执行得太晚了

protected override void OnStart() { base.OnStart(); const string permission = Manifest.Permission.ReadExternalStorage; if (ContextCompat.CheckSelfPermission(this, permission) != Permission.Granted) { ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.WriteExternalStorage, Manifest.Permission.ReadExternalStorage }, 0); } else { System.Diagnostics.Debug.WriteLine("Permission Granted!!!"); } } 的构造函数中读取文件代码

MainViewModel

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

3 个答案:

答案 0 :(得分:1)

修改您的功能

public MainPageViewModel()
{
GetValues();
}

public MainPageViewModel()
{
if((ActivityCompat.CheckSelfPermission(context, Manifest.Permission.WriteExternalStorage) == Permission.Granted)
        && (ActivityCompat.CheckSelfPermission(context, Manifest.Permission.ReadExternalStorage) == Permission.Granted))
 GetValues();
}

还可以使用

ContextCompat.CheckSelfPermission(Context, permission) == (int) Permission.Granted.
  

每次访问权限相关操作之前都要检查权限。

答案 1 :(得分:0)

请尝试使用Android库DEXTER来获取运行时应用的权限,也可以对其进行硬编码。并尝试在onCreate()方法中获取应用权限。

答案 2 :(得分:0)

使用此插件:https://github.com/jamesmontemagno/PermissionsPlugin

检查权限:

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

请求权限:

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