Android M:以编程方式撤消权限

W3h*_*hri 23 android android-permissions android-6.0-marshmallow

我目前正在玩android m的新权限系统.我计划的是在我的应用内设置中添加一个屏幕,用户可以在其中授予或撤消权限.

屏幕看起来像常规系统设置屏幕,但会有其他信息,为什么我的应用程序需要特定权限.此设置屏幕将是文档中建议的常规权限处理的补充.

工作流程将是:

  • 授予权限:打开系统对话框以授予/撤消(如此处建议)
  • 撤消权限:以编程方式撤消它

所以我的问题是,可以以编程方式撤销权限吗?我搜索了很多,但没有得到一些结果.

gre*_*f82 12

你什么都做不了(至少到现在为止).此外,没有任何意图操作来打开您的应用程序的活动系统设置.我的建议是在开发者预览问题跟踪器上打开"功能请求".


dex*_*dex 9

您可以撤消ADB Shell的许可.如果你考虑编写shell脚本并以编程方式完成所有这些,那么YES,否则NO

授予和撤消权限

您可以使用新的ADB包管理器(pm)命令来授予和撤消已安装应用程序的权限.此功能对自动化测试很有用.

要授予权限,请使用包管理器的grant命令:

$ adb shell pm grant <package_name> <permission_name>
Run Code Online (Sandbox Code Playgroud)

例如,要授予com.example.myapp包记录音频的权限,请使用以下命令:

 $ adb shell pm grant com.example.myapp android.permission.RECORD_AUDIO
Run Code Online (Sandbox Code Playgroud)

要撤消权限,请使用包管理器的revoke命令:

 $ adb shell pm revoke <package_name> <permission_name>
Run Code Online (Sandbox Code Playgroud)


Oli*_*etz 7

从 API 33 (Android 13) 开始,您可以通过revokeSelfPermissionOnKill API 以编程方式撤销之前授予的运行时权限。例如

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
   context.revokeSelfPermissionOnKill(Manifest.permission.POST_NOTIFICATIONS)
}
Run Code Online (Sandbox Code Playgroud)

触发运行时权限的异步撤销。如果当前未授予该权限,则不会发生任何情况(即使用户稍后授予该权限)。

还有一个函数需要多个权限的集合来撤销。

请务必为此设置版本代码保护,因为目前 IDE 中似乎没有警告。不幸的是,这还没有被添加到 ContextCompat 中。