运行时权限检查 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 的运行时权限支持更加满意为止。
关于 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 的运行时权限支持更加满意为止。