【问题标题】:Run time permission app level or activity level运行时权限应用级别或活动级别
【发布时间】:2016-04-01 00:01:14
【问题描述】:

在新的android api版本(API 23)中,我们现在需要在运行时请求权限。如果请求的权限是应用程序级别或活动,我有一个非常基本的疑问。根据this 文档您必须在每次执行需要该权限的操作时检查您是否拥有该权限。那么这是否意味着在应用程序级别授予权限,但建议在活动级别进行检查?此外,建议按照以下方式检查权限:

// Assume thisActivity is the current activity
int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,
        Manifest.permission.WRITE_CALENDAR);

在这里,我们清楚地看到权限的检查是通过传递活动的上下文来完成的。如果给定的权限是在应用程序级别,为什么我们需要活动上下文而不是应用程序上下文?(尽管该方法有可能在内部从活动上下文中获取应用程序上下文。)

【问题讨论】:

    标签: android android-permissions android-6.0-marshmallow runtime-permissions


    【解决方案1】:

    如果请求的权限是应用级别或活动

    Android 中的所有权限都适用于整个应用。

    这是否意味着权限是在应用级别授予的,但建议在活动级别进行检查?

    可以在任何地方通过checkSelfPermission() 检查您是否有权限。 请求用户的许可必须通过requestPermissions()从活动中完成。由此产生的权限授予将适用于您的整个应用。

    如果给定的权限是在应用程序级别,为什么我们需要活动上下文而不是应用程序上下文?

    任何Context 都适用于ContextCompat 方法。

    【讨论】:

    • 是否建议在应用启动时检查应用所需的所有权限?这个想法是在应用程序启动时,检查 MainActivity 中所有活动所需的所有权限,然后继续前进。我想这只有在我们不想根据提供的权限配置活动时才有意义。评论?
    • @Swapnil:“是否建议在应用启动时检查应用所需的所有权限?”——仅针对应用绝对需要的那些权限。否则,请等到用户执行一些触发您需要权限的代码路径的 UI 操作。例如,如果您仅在用户点击拍照操作栏项目时拍照,则在用户点击该操作栏项目之前不要担心权限。见:developer.android.com/training/permissions/…
    • 感谢您的 cmets。我想我的应用程序需要很多不可避免的权限。所以,我想我应该在一开始就检查一下。感谢您的回复。
    • 是否可以从Application 类而不是Activity 类调用checkSelfPermission()?如果可能的话,我更愿意这样做。
    • @RenniePet:是的,您可以使用任何Context 致电checkSelfPermission()。不过,您只能请求来自Activity 的权限。
    猜你喜欢
    • 2019-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多