uses-permission-sdk-23和uses-permission之间的区别是什么?

27

我刚刚了解到Android清单文件中的一个新标签叫做"uses-permission-sdk-23"

<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAMERA" />

请问有人可以提供这两者之间的区别吗?


我想知道SDK 23有什么特别之处。 - default123
6个回答

8

摘要

<uses-permission> 适用于所有的SDK,而 <uses-permission-sdk-23> 只会将权限应用于SDK 23+。

何时使用 <uses-permission-sdk-23>

  • 对于Android SDK 23及以上版本,您可以在运行时请求权限,但是权限在安装时将处于默认状态,并且用户不会在安装时提示。 (基本上,这可用于根据需要提示用户授予权限,并且您有机会说明为什么需要该权限。)

  • 然而,对于SDK 22及以下版本,用户在安装时会提示是否授权权限。由于某些权限可能会让用户感到可疑或不可靠,因此您可能不希望在SDK 22及以下版本中请求这些权限,因为您无法提前说明为什么需要它们,因此需要使用 <uses-permission-sdk-23> 标签。

  • 另外:文档不清楚sdk-23 权限是否也会导致应用在 Play Store 中被筛选,但如果您想要实现这一点,则建议您改用 <uses-feature> 元素声明硬件兼容性。

建议

通常,如果您的应用程序不需要支持SDK 22及以下版本,或者您请求的权限对SDK 22及以下版本不需要,则最好使用 <uses-permission-sdk-23>,因为这样清楚地说明了该权限是在运行时请求的。

否则,应使用 <uses-permission> ,因为它是向后兼容的,而且在任何SDK版本上都可以正确处理;在22及以下版本中,将在安装时请求权限,在23及以上版本中,由您决定在运行时请求。

尽可能在运行时请求权限,因为这样可以让您的用户解释为什么需要某些权限,而不仅仅是在安装时提示他们一系列权限列表,此时用户可能还没有建立对该应用的信任。

注意事项

这两种方法都接受一个 maxSdkVersion 属性,可在旧设备需要权限但新设备不需要时使用。(例如,在Android文档中显示的 WRITE_EXTERNAL_STORAGE 示例。)

参考资料:(Android文档)


请解释一下,我可以在没有SDK-23标签的情况下使用选项在运行时请求权限,只需调用函数:“requestPermissions(context ...”此函数已添加到SDK 24.1中。我不理解。 - Stav Bodik
1
如果我理解正确的话,通过添加带有sdk-23标签的权限,虽然它们在SDK 22及以下版本上不起作用,但这些权限在应用程序安装时不会列出,而是可以随时在应用程序中请求。看来我在回答中把它们搞混了。 - NBTX

6
如果应用程序运行在SDK版本23或更高版本的设备上。如果设备运行的是SDK版本22或更低版本
当您更新一个应用程序以包括需要额外权限的新功能时。如果用户更新了在运行SDK版本22或更低版本的设备上的应用程序,则系统会在安装时提示用户授予该更新中声明的所有新权限。如果新功能足够小,则您可能更喜欢在这些设备上完全禁用该功能,以便用户不必授予额外权限来更新应用程序。通过使用 uses-permission-sdk-23 元素而不是 uses-permission 只有在应用程序运行在支持运行时权限模型的平台上时,您才可以请求该权限,其中用户在运行应用程序时授予权限。
更多信息请参阅此文 uses - Permission sdk 23

很好的回答,但我有一个问题不太明白,如果我想支持旧版本,我应该同时使用它们吗?还是uses-permission-sdk-23就足够了? - Jesus Dimrix
@JesusDimrix,不,你不能只使用<uses-permission-sdk-23>权限,这个权限只适用于支持运行时权限的设备。因此,你应该同时使用<uses-permission>或者只使用<uses-permission>,但是你必须编写请求运行时权限的代码来支持>23的设备。 - Vishal Thakkar

4
通过使用<uses-permission-sdk-23>元素而不是<uses-permission>,您可以仅在应用程序运行在支持运行时权限模型的平台上时请求权限,在此模型中,用户在应用程序运行时授予权限。

这是为了支持Marshmallow(API-23)及以上版本的运行时权限功能而引入的。

这只是简单地指定应用程序想要特定的权限,但仅当应用程序运行在SDK版本23或更高版本的设备上时。如果设备运行的是SDK版本22或更低版本,则应用程序没有指定的权限。 当您更新需要额外权限的新功能时,此元素非常有用。如果用户在运行SDK版本22或更低版本的设备上更新应用程序,则系统会在安装时提示用户授予在该更新中声明的所有新权限。

您可以参考文档


1

指定一个应用程序需要特定的权限,但仅当该应用程序在API级别为23或更高的设备上运行时。如果设备运行的API级别为22或更低,则该应用程序没有指定的权限。


1

user-permission-sdk-23指定了希望获取特定权限的应用正在运行SDK版本23或更高版本。

当您更新应用以运行SDK 23元素时,它被用于正在运行不支持新元素的较低API的用户。

Android清单 - 用户权限


-1

请查看文档 使用权限

使用

<uses-permission-sdk23>

仅适用于Marshmallow设备申请权限。


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