运行时权限检查 Android Marshmallow

Runtime permission check in Android Marshmallow

关于 Marshmallow,我如何判断 Android 中的哪些操作系统调用需要权限检查?对于某些 Location Manager 调用,如果我在调用前不检查权限,编译器将显示错误。但是还有许多其他操作系统调用需要权限,但如果在调用之前未检查权限,则不会生成编译器错误。

例如,我在我的一个应用程序中调用了位置管理器的 sendExtraCommand 方法。编译器没有给出任何指示在调用之前需要进行权限检查,所以我没有。当我将鼠标悬停在 Android Studio 中的调用上时,文档 window 中的信息没有给出调用需要权限的任何指示。但是当 Marshmallow 用户开始使用我的应用程序时,他们遇到了安全异常。

是我的问题,还是 Marshmallow 的安全问题考虑得非常糟糕?

这里有一个类似的问题,但是没有很好的答案,所以我创建了这个问题,希望这个问题能得到更多的关注: How to find required Android Marshmallow runtime permissions in code?

how do I tell which operating system calls in Android require a permission check?

正如您所注意到的,在某些情况下,您可能会收到 Lint 警告等。人们认为这会随着时间的推移而改善。

在其他情况下,您阅读 JavaDocs,其中 class 或方法提到您需要权限。当您将 <uses-permission> 元素添加到您的清单时,还要考虑它是否是 the dangerous permissions that requires handling at runtime 之一。

除此之外,当您测试您的应用程序并且您的测试失败时,您会发现。

如果您发现这些不足,请将您的 targetSdkVersion 设置为 22 或更低,直到您对 Android 的运行时权限支持更加满意为止。