android - 如何等到用户在 Activity 中给予或拒绝权限请求?
问题描述
我希望我的代码等到用户单击权限请求弹出窗口上的某些内容,然后继续。
我的 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)
{
}
}
解决方案
我找到了一个解决方案:
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());
}
推荐阅读
- google-cloud-platform - GCP STT 快速入门问题的身份验证
- neo4j - 使用 terraform 从 AWS Secret Manager 自动检索 Neo4j 的密码
- mysql - [express,mysql]非app.js文件中使用mysql数据的问题
- javascript - SSRS 无法与快速代理一起正常工作
- java - 如何在 OAS 3.1.0 中定义要在构建中生成的具有不同名称和值的枚举?
- jsl - 如何找到一个点所在的区域
- javascript - 尝试使用 Leaflet-kml 插件将 KML 文件加载到传单地图中
- excel - 将多个文件复制到另一个工作簿
- amazon-s3 - 如何启用通过 Terraform 传输到 AWS 的加密?
- html - 如何仅使用 flex-box 保持元素之间的默认间隙?