Android在8.0版本中略微改变了其权限策略:
在Android 8.0(API级别26)之前,如果应用程序在运行时请求权限并且授予了该权限,则系统还会错误地授予应用程序属于同一权限组并在清单中注册的其余权限。
对于针对Android 8.0的应用程序,此行为已得到纠正。应用程序仅被授予显式请求的权限。但是,一旦用户向应用程序授予权限,该权限组中所有后续的权限请求都将自动授予。
例如,假设一个应用程序在其清单中列出了READ_EXTERNAL_STORAGE和WRITE_EXTERNAL_STORAGE。该应用程序请求READ_EXTERNAL_STORAGE并且用户授予它。如果应用程序针对API级别25或更低级别,则系统同时授予WRITE_EXTERNAL_STORAGE,因为它属于相同的STORAGE权限组并且也在清单中注册。如果应用程序针对Android 8.0(API级别26),则系统仅在该时间授予READ_EXTERNAL_STORAGE;但是,如果应用程序稍后请求WRITE_EXTERNAL_STORAGE,则系统将立即授予该特权而无需提示用户。
这种改变的好处是什么?它似乎实现了相同的目的。先前的方法有什么问题,新方法是如何解决的?