You need to enable JavaScript to run this app. Xamarin开发Android应用如何一次性申请Manifest中所有已声明权限
优惠活动
大模型
产品
解决方案
定价
更多

Xamarin开发Android应用如何一次性申请Manifest中所有已声明权限

实现方案

你需要先读取AndroidManifest中声明的所有权限,过滤出未授权的列表后再统一调用申请接口,完整修改逻辑如下:


1. 定义权限申请请求码

提前声明唯一请求码用于标识本次权限申请:

private const int RequestAllPermissionsCode = 100;

2. 替换原有权限检查逻辑

把你只检查相机权限的代码替换为以下逻辑,实现自动读取所有声明权限并申请:

// 读取Manifest中声明的全部权限
var declaredPermissions = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Permissions)?.RequestedPermissions;

if (declaredPermissions == null || declaredPermissions.Length == 0)
{
    // 未声明任何权限,直接执行后续业务
    return;
}

// 过滤出尚未授予的权限
var notGrantedPermissions = new List<string>();
foreach (var permission in declaredPermissions)
{
    if (ContextCompat.CheckSelfPermission(this, permission) != (int)Permission.Granted)
    {
        notGrantedPermissions.Add(permission);
    }
}

if (notGrantedPermissions.Count == 0)
{
    // 所有权限已授予,直接执行后续业务
    return;
}

// 一次性申请所有未授权权限
ActivityCompat.RequestPermissions(this, notGrantedPermissions.ToArray(), RequestAllPermissionsCode);

3. 处理权限申请结果回调

重写Activity的OnRequestPermissionsResult方法,接收用户授权结果:

public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Permission[] grantResults)
{
    base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
    
    if (requestCode == RequestAllPermissionsCode)
    {
        bool allGranted = true;
        foreach (var result in grantResults)
        {
            if (result != Permission.Granted)
            {
                allGranted = false;
                break;
            }
        }

        if (allGranted)
        {
            // 所有权限申请通过,执行业务逻辑
        }
        else
        {
            // 有权限被拒绝,可根据业务需要提示用户或关闭对应功能
        }
    }
}

注意:Android 6.0及以上系统仅需要动态申请危险权限,普通权限会在安装时自动授予,上述逻辑会自动跳过已授权权限,不会重复申请。


内容的提问来源于stack exchange,提问作者Sofiane Boukedjani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.15 08:24:04