前往我的应用程序的应用权限屏幕

52

在Android-M中,有没有意图可以进入我的应用程序的“应用权限”屏幕?

我正在为Android-M准备我的应用程序,并使用新的权限模型。 我已经按照链接中提到的所有步骤进行了操作:https://developer.android.com/training/permissions/requesting.html。一切都OK,唯一不好的是,如果用户勾选了“不再询问”按钮并拒绝了权限,则在下一次启动时,我想为用户提供一个选项,可以让用户自己进入应用程序的“应用权限” 并更改权限,如果他改变主意的话。为了让非技术人员更轻松,我想提供一个按钮,可以直接带用户进入我的应用程序的“应用权限”屏幕。 有方法吗?(这比给用户如下说明要好得多:菜单设置应用管理应用→选择应用程序)

感谢您的帮助!


2个回答

95

不,没有意图直接跳转到权限屏幕。

然而,就像在之前的 Android 版本中一样,您可以使用如下代码指向应用程序的详细设置页面:

Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
    Uri.fromParts("package", getPackageName(), null));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

这将使他们只需点击一个按钮(该屏幕上的“权限”按钮)即可访问权限。

请注意,根据有关请求权限的UX,仅在最后一种情况下且仅在应用程序完全需要该权限的情况下,才考虑链接到设置页面 - 理想情况下,当shouldShowRequestPermissionRationale()返回true时(即,他们拒绝了它一次但没有选择“不再询问”),您应该显示一个强有力的理由,以便第二次用户看到权限对话框时,他们确切地知道为什么您需要该权限。这意味着,选择“不再询问”的用户应被视为用户永远不会授予您该权限的非常强烈的信号。


感谢您的回答。正如您建议的那样,我正在展示足够的文字来解释为什么需要该权限,并在developer.android链接中也提出了建议。猜测到达应用程序设置页面就足够了,您是正确的,如果我没有该权限,该应用程序基本上就无法使用,所以这是我的最后选择。要么进入应用程序的设置并授予权限,要么在那一点退出应用程序。再次感谢Ian! - luckylukein
是否可以至少进入全局权限屏幕?列出所有应用程序的所有权限的那个屏幕? - android developer
很有趣,这应该被视为最后的手段。我的意思是,我猜他们希望你使用“官方”的权限API,但是他们将requestPermissions调用异步化的事实意味着你几乎不能在不完全重新架构你的应用程序的情况下实现M模型。 - eidylon
@eidylon - 这也是一个很好的机会,来检查您是否真的需要危险权限,因为在许多情况下(例如存储权限),都存在替代方案。异步流程是必需的,因为当您启动权限对话框时,实际上是在启动一个新的活动,并使用与“startActivityForResult()”相同的基础机制向另一个应用程序(在本例中为系统本身)请求某些内容。 - ianhanniballake
@ianhanniballake - 我非常确定我需要读取联系人。我的应用程序显示您的联系人组,因此它需要能够读取联系人。我不认为有任何像存储访问那样的“安全”绕过联系人访问的方法,对吗?我想这在某种程度上说得通,关于启动新活动的事情。 - eidylon
1
@eidylon - 如果您的UI中显示多个联系人,则需要Contacts权限。有许多与联系人相关的常见意图,但它们都围绕选择/插入/编辑特定联系人展开,而不是在您的UI中查看所有联系人。 - ianhanniballake

3

很遗憾这是不可能的,但是像其他应用程序一样,我们可以打开应用程序的设置页面,以便用户可以从那里手动授予所需的权限。

val intent = Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
Uri.fromParts("package", packageName, null)
)
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接