You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用能否主动撤销已授予权限?Xamarin开发咨询

问题解答

核心结论

Android系统不允许应用主动撤销自身已被授予的权限——这是系统层面的安全限制,权限的控制权完全在用户手中,应用仅能发起权限授予请求,无法主动收回已获得的权限。Xamarin.Essentials也没有相关API,因为底层Android系统本身不支持该操作。

推荐解决方案:引导用户前往权限设置页

既然无法主动撤销权限,最佳实践是在应用内提供入口,引导用户到系统的应用权限设置页面,让用户手动完成撤销操作。这种方式可以直接复用你现有的权限判断逻辑,无需额外新增复杂的判断层。

Xamarin实现方式

方法1:使用Xamarin.Essentials的Launcher打开设置页

构造应用设置的Uri,通过Launcher启动系统设置页面:

using Xamarin.Essentials;

public async Task OpenAppPermissionsSettings()
{
    var appSettingsUri = new Uri("package:" + Android.App.Application.Context.PackageName);
    await Launcher.OpenAsync(appSettingsUri);
}

该代码会直接打开当前应用的系统设置页,用户可找到权限选项手动撤销步数读取权限。

方法2:使用Android原生Intent(精准跳转至权限页)

若想直接跳转到权限设置的具体页面,可使用Android原生Intent实现:

using Android.Content;
using Android.OS;

public void OpenPermissionSettings()
{
    Intent intent = new Intent();
    if (Build.VERSION.SdkInt >= BuildVersionCodes.M)
    {
        intent.SetAction(Android.Provider.Settings.ActionApplicationDetailsSettings);
        Uri uri = Uri.FromParts("package", Android.App.Application.Context.PackageName, null);
        intent.SetData(uri);
    }
    else
    {
        // 适配Android 6.0以下版本,跳转至应用设置列表
        intent.SetAction(Android.Provider.Settings.ActionApplicationSettings);
    }
    intent.AddFlags(ActivityFlags.NewTask);
    Android.App.Application.Context.StartActivity(intent);
}

补充说明

引导用户操作时,建议在应用内给出清晰提示,比如“若要关闭步数上报,请前往系统设置撤销步数读取权限”,提升用户体验。另外,你现有权限判断逻辑(如检查权限是否存在,不存在则不执行上报)依然有效——用户手动撤销权限后,应用下次检查权限会得到“未授予”的结果,自然会触发拒绝后的逻辑。

内容的提问来源于stack exchange,提问作者Victor Chelaru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:35:20