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

Difference Between uses-permission-sdk-23 and uses-permission?

我刚刚了解到 android 清单文件中的新标签,名为“uses-permission-sdk-23

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

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

user-permission-sdk-23 指定需要特定权限的应用 运行ning 在 SDK 版本 23 或更高版本上。 当您将您的应用程序更新为 运行 SDK 23 元素并且用户 运行 宁一个不支持新元素的较低 API 时使用它。

Android manifest - user permissions

查看文档 uses permission

使用

<uses-permission-sdk23>

仅为 Marshmallow 设备申请权限。

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

时授予应用程序权限

已引入此功能以支持 Marshmallow (API-23) 以后的运行时权限功能。

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

您可以参考documentation

如果应用 运行 在 SDK 版本 23 或更高版本的设备上运行。如果设备是 运行 SDK 版本 22 或更低版本

当您更新应用以包含需要额外权限的新功能时。如果用户在 运行 SDK 版本 22 或更低版本的设备上更新应用程序,系统会在安装时提示用户授予在该更新中声明的所有新权限。如果新功能足够小,您可能更愿意在这些设备上完全禁用该功能,这样用户就不必授予额外的权限来更新应用程序。通过使用 uses-permission-sdk-23 元素而不是 uses-permission

仅当应用程序在支持运行时权限模型的平台上 运行 时,您才可以请求权限,其中用户在应用程序处于 运行 时向其授予权限].

有关更多信息,请参阅此内容。uses - Permission sdk 23

指定某个应用需要特定权限,但前提是该应用 运行 在具有 API 级别 23 或更高级别的设备上。如果设备 运行 API 级别 22 或更低,应用程序没有指定的权限。

总结

<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 商店中被过滤,但如果它如果您打算这样做,文档建议您使用 <uses-feature> 元素来声明硬件兼容性。

推荐

通常,如果您的应用不需要支持 SDK 22 及更低版本,或者如果 SDK 22 或更低版本不需要您请求的权限,则通常认为使用 <uses-permission-sdk-23> 是最佳做法然后明确在运行时请求此权限。

否则,应使用<uses-permission>,因为这是向后兼容的,并且该行为在任何 SDK 版本上都是正确的; 22 及以下,将在安装时请求权限。 23及以上,由你在运行时请求。

You should request permissions at runtime wherever possible as it allows you to explain to your user why you need certain permissions rather than just prompting them with a list of permissions at install time when the user has likely not established trust in the app.

备注

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

参考:(Android Documentation)