【问题标题】:Runtime permission check in Android MarshmallowAndroid Marshmallow 中的运行时权限检查
【发布时间】:2016-07-16 04:01:44
【问题描述】:

关于 Marshmallow,我如何判断 Android 中的哪些操作系统调用需要权限检查?对于某些位置管理器调用,如果我在调用前不检查权限,编译器会显示错误。但是还有很多其他操作系统调用需要权限,但如果在调用之前没有检查权限,它们不会产生编译器错误。

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

只有我一个人,还是 Marshmallow 的安全问题考虑得非常糟糕?

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

【问题讨论】:

标签: android android-6.0-marshmallow android-permissions


【解决方案1】:

如何判断 Android 中的哪些操作系统调用需要权限检查?

正如您所注意到的,在某些情况下,您可能会收到 Lint 警告等。可以想象,随着时间的推移,这种情况会有所改善。

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

除此之外,您会在测试应用时发现测试失败。

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

【讨论】:

  • 感谢您提供非常好的答案。我目前实际上没有 Marshmallow 设备,所以我暂时只能使用您的最后一个建议。
  • 有趣的旁注:我注意到我必须请求互联网许可才能加载 Admob 广告。我不太清楚如何从 Marshmallow 及以上的广告中赚钱,因为没有人会授予加载和显示广告的权限。
  • @ChrisB: INTERNET 不是dangerous 权限。您不需要提示用户; AFAIK,你不能提示用户。
猜你喜欢
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2017-07-27
  • 1970-01-01
  • 2016-08-19
相关资源
最近更新 更多