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

Posted

技术标签:

【中文标题】Android M:以编程方式撤销权限【英文标题】:Android M: Programmatically revoke permissions 【发布时间】:2015-10-10 16:09:17 【问题描述】:

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

该屏幕看起来像常规的系统设置屏幕,但会包含为什么我的应用需要特定权限的其他信息。正如Documentation 中所建议的,此设置屏幕将是对常规权限处理的补充。

工作流程是:

授予权限:打开系统对话框以授予/撤销 (like suggested here) 撤销权限:以编程方式撤销它

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

【问题讨论】:

答案似乎是“否”。见***.com/questions/7517171/… 和***.com/questions/19462511/…。 这些 Q/As 指的是“旧”权限系统,所有权限都在安装时授予。我的问题与 Andoid M 下的新系统有关 【参考方案1】:

否 在具有新权限模型的 Android M Preview 中,无法以编程方式实现。

但是您可以手动操作。 revoke permissions manually

【讨论】:

获取 android M 和 pre M 设备位置详细信息的示例代码【参考方案2】:

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

【讨论】:

这很可悲,尤其是打开系统设置的意图是我的计划 b。我想我应该打开一个功能请求。 @greywolf82:你知道最新版本的Android是否仍然如此?【参考方案3】:

您可以撤销 ADB Shell 的权限。 如果您考虑编写 shell 脚本并以编程方式执行所有这些操作,那么是,否则否

Grant and revoke permissions

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

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

$ adb shell pm grant <package_name> <permission_name>

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

 $ adb shell pm grant com.example.myapp android.permission.RECORD_AUDIO

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

 $ adb shell pm revoke <package_name> <permission_name>

【讨论】:

【参考方案4】:

对于某些特殊权限,例如 SYSTEM_ALERT_WINDOW。 你需要这个:

adb shell appops set <package_name> SYSTEM_ALERT_WINDOW allow

【讨论】:

以上是关于Android M:以编程方式撤销权限的主要内容,如果未能解决你的问题,请参考以下文章

如何在android中以编程方式更改文件/文件夹权限

Android:权限拒绝:以撤销权限启动 Intent android.permission.CAMERA

以编程方式设置android xml

如何以编程方式在 Android 按钮上设置 drawableLeft?

如何以编程方式正确添加视图?

以编程方式从 android 中的 manifest.xml 检索权限