今天我在Android M(6.0)上测试了我的一个应用程序。我了解此版本中的权限授予已更改,我需要进行一些更改才能使我的应用程序与Android 6.0兼容(here is the details)。
据我了解,例如,如果我想授予写入sdcard(永久存储)的访问权限,这是一个危险的权限,我必须要求用户授予访问权限,然后处理用户决策(授予/拒绝),否则总是我的请求永远被拒绝。
我不知道我是对还是不错,但我想知道它是否以某种方式反对向后兼容?我的意思是每个运行在旧版本中的应用程序都需要更改才能在6.0版本中运行?如果不再支持特殊应用程序,那么android 6.0是我们应该告别的地方吗?
在这种新的氛围中,我需要更改旧的应用程序以使它们在Marshmallow中运行(如果它们需要危险的权限)?
答案 0 :(得分:1)
似乎可以保持向后兼容性。来自the page you linked,
- 如果设备运行Android 5.1或更低版本,或,您应用的目标SDK为22或更低:如果您在清单中列出危险权限,则用户必须授予安装应用程序时的权限;如果他们不授予权限,系统根本不会安装该应用程序。
- 如果设备运行的是Android 6.0或更高版本,则和您应用的目标SDK为23或更高:应用必须列出清单中的权限,并且必须请求每个应用程序运行时需要的危险权限。用户可以授予或拒绝每个权限,即使用户拒绝权限请求,应用也可以继续以有限的功能运行。
因此,针对SDK 22或更低版本的旧应用程序将看到在安装时授予的旧权限行为。只有针对SDK 23或更高版本的新应用才能立即担心这一点。
该页面列出了您应该注意的一个警告:
注意:从Android 6.0(API级别23)开始,用户可以随时撤消任何应用的权限,即使该应用针对较低的API级别也是如此。无论您的应用针对什么API级别,您都应该测试自己的应用,以验证其在错过所需权限时是否正常运行。
对于您的应用程序,即使是遗留应用程序,这意味着他们需要能够幸免于您通常期望他们拥有的权限。相应地测试和更新。
对于您安装的任何第三方旧版应用程序,这意味着在撤销其权限时必须谨慎,因为假定其特权操作成功的应用程序可能会在意外撤消这些权限时出现问题。显然,第三方开发人员应该测试并解决这个问题,但这可能并非总能发生。
答案 1 :(得分:0)
来自Android文档:
在所有Android版本上,您的应用都需要声明正常 以及它在应用程序清单中需要的危险权限 在声明权限中描述。但是,效果呢 声明因系统版本和您的而异 应用程序的目标SDK级别:
- 如果设备运行的是Android 5.1或更低版本,或者您应用的目标 SDK为22或更低:如果您列出了危险权限 清单,用户在安装时必须授予权限 应用;如果他们不授予权限,则系统不会安装 应用程序。
- 如果设备运行Android 6.0或更高版本,并且 您的应用的目标SDK是23或更高:应用必须列出 清单中的权限,它必须请求每个危险 应用程序运行时需要的权限。用户可以授予或 拒绝每个权限,应用程序可以继续运行有限 功能即使用户拒绝权限请求也是如此。
如果要在Android 6.0
中运行应用程序,则必须编写逻辑以在运行时请求权限。
但它不会改变旧版本中应用程序的行为,在这些情况下,将在安装时请求权限。