我想在应用启动/加载时读取一个文件。我已经编写了代码,要求获得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
如何首先授予权限并执行后续代码?
答案 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>();