【问题标题】:how to check whether a permission is denied by user in android如何检查android中的用户是否拒绝了权限
【发布时间】:2015-11-13 03:55:54
【问题描述】:

例如,我的应用在 Manifest 文件中请求权限,如 android.permission.WRITE_EXTERNAL_STORAGE,我如何检查权限是否被用户或某些安全应用拒绝?

【问题讨论】:

  • 经过一些测试后,最好调用 checkCallingPermission(permission) 来检查运行时权限,而不是调用 checkSelfPermission(permission)

标签: android permissions


【解决方案1】:

调用 context.checkCallingPermission(permission)

permission -- 被检查的权限名称,字符串形式

如果您有权限,则返回 PERMISSION_GRANTED,否则返回 PERMISSION_DENIED。

checkCallingPermission

正如文档和 cmets 中所述,这里有一些微妙之处。

【讨论】:

  • 在我做了一些测试后,我发现当我的应用程序的权限被Clean Master拒绝时,如果我调用checkSelfPermission(String permission),它返回了PERMISSION_GRANTED,这意味着这个方法不仅检查了运行时权限,还要检查安装权限,所以在我的情况下,最好调用 checkCallingPermission 只检查运行时权限
【解决方案2】:

现在,android 要求用户接受应用在安装清单中要求的所有权限。在即将发布的 M 版本中,android 将在“按需”的基础上切换到 iOS 风格的权限。 (对于某些权限。有关更多详细信息,请参阅@Commonsware 的评论)这意味着每当用户尝试使用需要权限的功能时,它都会要求他们接受或拒绝。如果他们点击拒绝,我想会有一个 sdk 正面和负面响应按钮界面来实现。

至于你现在的困境,如果用户拒绝权限,他们将无法使用你的应用周期。

【讨论】:

  • "在即将发布的 M 版本中,android 将根据需要切换到 iOS 权限样式" -- only for some permissionsWRITE_EXTERNAL_STORAGE 恰好是一个。在 Android 6.0+ 上使用Context 上的checkSelfPermission() 来确定您是否拥有运行时权限。
  • 感谢@CommonsWare!顺便说一句,喜欢你的书。近期有打算发布M相关资料吗?或者你玩过开发者预览版了吗?
  • 感谢您的客气话! 6.8 版将于下周发布,涵盖 Android 6.0,包括运行时权限系统上的许多内容。
  • "正式版是6.0吗?" -- as of Monday, yes.
  • @cj1098 是的,没问题:)
【解决方案3】:

您可以使用 checkCallingPermission() 来检查用户或某些应用程序拒绝运行时间权限的天气。

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多