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
相关产品推荐
相关产品推荐

