我刚刚了解到Android清单文件中的一个新标签叫做"uses-permission-sdk-23"
<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAMERA" />
请问有人可以提供这两者之间的区别吗?
我刚刚了解到Android清单文件中的一个新标签叫做"uses-permission-sdk-23"
<uses-permission-sdk-23 android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CAMERA" />
请问有人可以提供这两者之间的区别吗?
<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
标签的权限,虽然它们在SDK 22及以下版本上不起作用,但这些权限在应用程序安装时不会列出,而是可以随时在应用程序中请求。看来我在回答中把它们搞混了。 - NBTX<uses-permission-sdk-23>
元素而不是<uses-permission>
,您可以仅在应用程序运行在支持运行时权限模型的平台上时请求权限,在此模型中,用户在应用程序运行时授予权限。
这是为了支持Marshmallow(API-23)及以上版本的运行时权限功能而引入的。
这只是简单地指定应用程序想要特定的权限,但仅当应用程序运行在SDK版本23或更高版本的设备上时。如果设备运行的是SDK版本22或更低版本,则应用程序没有指定的权限。 当您更新需要额外权限的新功能时,此元素非常有用。如果用户在运行SDK版本22或更低版本的设备上更新应用程序,则系统会在安装时提示用户授予在该更新中声明的所有新权限。
您可以参考文档。
指定一个应用程序需要特定的权限,但仅当该应用程序在API级别为23或更高的设备上运行时。如果设备运行的API级别为22或更低,则该应用程序没有指定的权限。
user-permission-sdk-23指定了希望获取特定权限的应用正在运行SDK版本23或更高版本。
当您更新应用以运行SDK 23元素时,它被用于正在运行不支持新元素的较低API的用户。