如果我不需要Android 6.0 API 23中的功能,我是否必须关心运行时权限?

时间:2016-03-12 20:11:58

标签: android compatibility

这是一个简单的问题,如果有人确认我的想法,我会得到帮助。

Android 6中有一项新功能/更改,即运行时权限,其中应用程序不会在运行时查询权限,而是在他们真正使用该功能的时候。这是一个好主意,但支持它需要我更改代码,我宁愿不编写更多Java而不是绝对必要的代码。

因此,如果我真的不需要API 23(Android 6)功能的功能,我可以简单地使用API​​ 22版本并保持我的代码不变,但能够在Android 6手机上运行吗?

我的看法是,新的Android版本与至少一些以前的API版本兼容,否则所有应用都需要更新。

2 个答案:

答案 0 :(得分:2)

如果您在API 22上编译应用程序,则无法使用API​​ 23的任何功能。您的应用程序将在API 23上正常运行,就像在API 22上一样。

  

如果设备运行的是Android 5.1或更低版本,或者您应用的目标SDK为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果他们没有授予权限,系统根本不会安装应用程序。

Requesting Permissions at Run Time

答案 1 :(得分:2)

  

因此,如果我真的不需要API 23(Android 6)功能的功能,我可以简单地使用API​​ 22版本并保持我的代码不变,但能够在Android 6手机上运行吗?

TL; DR:您不需要处理运行时权限,但不是出于您引用的原因。

控制您的应用是否必须处理运行时权限的是targetSdkVersion。如果是23或更高,则必须在Java代码中处理运行时权限。如果是22或更低,则不会,但用户仍然可以通过“设置”撤消权限。

targetSdkVersion会影响API级别的部分功能,但不会影响所有功能。通常,它所影响的内容会在Build.VERSION_CODES值的JavaDocs中写入,但无论出于何种原因,Google decided not to bother

是否可以将代码添加到任何API Level 23功能与compileSdkVersion相关联。 API级别中有许多不受targetSdkVersion影响的内容,例如新类和新方法。在您的情况下,您表明您不需要任何此类,这很好。但是,compileSdkVersion不会影响Android 6.0+是否要求您在Java代码中实现运行时权限逻辑; targetSdkVersion确实如此。

最终,有些事情会迫使您将targetSdkVersion提高到23或更高。此时,您需要“咬紧牙关”并处理运行时权限。