2015-11-05 27 views
4

我很想知道新的Android 6.0 Marshmallow功能,可以让用户明确设置应用程序允许哪些权限使用。我的问题是这会如何影响使用权限集的现有应用程序。未更新的应用程序会发生什么情况,该应用程序执行的代码需要用户在Android 6.0中不允许的权限Marshmallow

例如,一个未更新的应用程序[目标sdk版本< 23]已经表明允许使用相机,但用户手动禁止它。应用程序在执行使用权限的代码时会发生什么?它会不会崩溃?

我假设新应用程序在执行代码之前必须检查他们是否具有权限 - 我的问题是关于应用程序而不是更改为处理这些情况。

+0

没有测试过它,但可能它会抛出一个异常,就像它错过了在声明中声明权限一样。 – Nanoc

回答

10

我的问题是有关未变更为处理这些案件

隐含的假设是targetSdkVersion将低于23.任何人谁设置自己的targetSdkVersion 23或更高必须应用更改他们的应用程序以处理运行时权限,否则将永远无法获得dangerous权限。

在这种情况下,引用自己从my book

应用具有低于23 targetSdkVersion,在表面上,表现 在Android 6.0+,因为它们会 一个较旧的设备上:在提示用户所有权限,并且 应用程序在安装该应用程序时被授予这些权限。

但是,用户将仍然可以进入设置和撤消权限从这些应用 ,对于任何权限的应用程序的请求是在 一个运行权限组。

一般情况下,你会忽略这个问题。您拨打 受到用户撤销权限保护的方法的所有电话都将“工作”,只要他们将 不抛出SecurityException即可。然而,你只是不会得到任何结果 回来或有预期的效果。因此,举例来说,如果你试图query()ContactsContractContentProvider,用户撤消您的访问 联系相关的权限,该query()会返回一个空 Cursor。这是完全有效的回应,甚至忽略了许可 问题,因为用户完全有可能没有联系人。无论如何,你的应用程序 应该正常处理这些情况。因此,理论上,即使您对丢失的权限没有做任何特别处理,您的应用程序也应该可以继续使用,尽管用户的功能已经减少。戴夫史密斯 outlines the expected results 传统的应用程序调用方法无权限。

+0

因此,就像你的例子,对于互联网许可,它会得到一个超时?以及相机允许什么? – Nanoc

+0

@Nanoc:'INTERNET'不是'危险'权限,不能被用户撤销。被撤销的CAMERA会导致带有原始android.hardware.Camera API的CameraAccessException,就好像相机已存在但被策略(例如设备管理规则)阻止。您应该对'android.hardware.camera2' API获得类似的效果,但我忘记了确切的症状。 – CommonsWare

+2

感谢您的解释,所以使用互联网对谷歌来说并不危险......很高兴知道。 – Nanoc