问题描述
我希望我的代码等待,直到用户单击权限请求弹出窗口中的某些内容,然后继续。
我在RequestActivity中有此选项,但是在应用加载之前,我需要请求结果。
protected override void OnResume()
{
base.OnResume();
Task startupWork = new Task(async () => { await GetPermissions(); });
startupWork.Start();
StartActivity(new Intent(Application.Context,typeof(MainActivity)));
}
public static async Task GetPermissions()
{
var permissionsstartList = new List<Permission>()
{
Permission.Storage,Permission.Camera
};
var permissionsNeededList = new List<Permission>();
try
{
foreach (var permission in permissionsstartList)
{
var status = await Plugin.Permissions.Crosspermissions.Current.CheckPermissionStatusAsync(permission);
if (status != PermissionStatus.Granted)
{
permissionsNeededList.Add(permission);
}
}
}
catch (System.Exception)
{
}
var results = await Plugin.Permissions.Crosspermissions.Current.RequestPermissionsAsync(permissionsNeededList.ToArray());
try
{
foreach (var permission in permissionsNeededList)
{
var status = PermissionStatus.Denied;
//Best practice to always check that the key exists
if (results.ContainsKey(permission))
status = results[permission];
}
}
catch (System.Exception)
{
}
}
解决方法
尝试这样的事情
protected override void OnResume()
{
base.OnResume();
if (await GetPermissions())
StartActivity(new Intent(Application.Context,typeof(MainActivity)));
}
仅是建议,请勿从OnResume()
导航。从其他路径尝试,即类构造函数。
导入
使用System.Threading.Tasks;
public bool GetPermissions()
{
bool result;
// EVERYTHING SAME AS YOUR CODE
try
{
foreach (var permission in permissionsNeededList)
{
var status = PermissionStatus.Denied;
//Best practice to always check that the key exists
if (results.ContainsKey(permission))
status = results[permission];
//If all permissions are set
result = true;
}
}
catch (System.Exception)
{
result = false;
}
return result;
}
只需简单一点,而无需返回任务。
让我知道这是您真正想要的还是其他东西。
,我找到了解决方法:
OnCreate函数:
List<string> permissionNeededList = new List<string>();
if (ActivityCompat.CheckSelfPermission(Android.App.Application.Context,Manifest.Permission.Camera) != (int)Permission.Granted)
{
permissionNeededList.Add(Manifest.Permission.Camera);
}
if (ActivityCompat.CheckSelfPermission(Android.App.Application.Context,Manifest.Permission.WriteExternalStorage) != (int)Permission.Granted)
{
permissionNeededList.Add(Manifest.Permission.WriteExternalStorage);
}
if (permissionNeededList.Count == 0)
{
LoadApplication(new App());
}
else
{
ActivityCompat.RequestPermissions(this,permissionNeededList.ToArray(),1);
}
OnRequestPermissionsResult函数:
public override void OnRequestPermissionsResult(int requestCode,string[] permissions,Permission[] grantResults)
{
LoadApplication(new App());
}