这是一个简单的问题,如果有人确认我的想法,我会得到帮助。
Android 6中有一项新功能/更改,即运行时权限,其中应用程序不会在运行时查询权限,而是在他们真正使用该功能的时候。这是一个好主意,但支持它需要我更改代码,我宁愿不编写更多Java而不是绝对必要的代码。
因此,如果我真的不需要API 23(Android 6)功能的功能,我可以简单地使用API 22版本并保持我的代码不变,但能够在Android 6手机上运行吗?
我的看法是,新的Android版本与至少一些以前的API版本兼容,否则所有应用都需要更新。
答案 0 :(得分:2)
如果您在API 22上编译应用程序,则无法使用API 23的任何功能。您的应用程序将在API 23上正常运行,就像在API 22上一样。
如果设备运行的是Android 5.1或更低版本,或者您应用的目标SDK为22或更低:如果您在清单中列出了危险权限,则用户必须在安装应用时授予权限;如果他们没有授予权限,系统根本不会安装应用程序。
答案 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或更高。此时,您需要“咬紧牙关”并处理运行时权限。