android M 之前的运行时权限(api 14 及更高版本)

Posted

技术标签:

【中文标题】android M 之前的运行时权限(api 14 及更高版本)【英文标题】:Runtime permission before android M (api 14 and up) 【发布时间】:2016-02-05 17:07:46 【问题描述】:

有没有办法为面向 API 14 及更高版本的应用实现运行时权限?我的应用程序具有相机功能,但不是必需的。如何在清单中指定这个?现在我有

<uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>

    <uses-feature android:name="android.hardware.camera"/>
    <uses-feature android:name="android.hardware.camera2.autofocus"/>

有更好的方法吗?

【问题讨论】:

【参考方案1】:

有没有办法为面向 API 14 及更高版本的应用实现运行时权限?

如果您的意思是“在安装时对用户隐藏权限,并且只在运行时请求它们”,那么答案是否定的。

有更好的方法吗?

这是做到这一点并将一切都集中在一个应用程序中的唯一方法。

您可以使用单独的 APK 将相机功能实现为插件。您将使用安全 IPC 从主应用程序与插件进行通信(例如,自定义 signature 权限或您自己的手动签名检查)。该插件将在其清单中具有CAMERA 和相关权限;主应用程序不会。

从好的方面来说,用户不必同意主应用程序的这些权限,而那些从不安装插件的人永远不必担心权限。

但是,这确实增加了复杂性:

用户必须安装主应用程序和插件才能在一个应用程序中获得您目前拥有的全部功能

您必须使用PackageManager等来确定插件是否存在并且可以使用

您必须与一些人打交道,他们会在没有主应用程序的情况下安装插件并想知道发生了什么

【讨论】:

感谢您的洞察力。但我的 sn-p 似乎是错误的。它导致 google play 将我的应用程序与 0 个设备相匹配。见***.com/questions/33525177/…

以上是关于android M 之前的运行时权限(api 14 及更高版本)的主要内容,如果未能解决你的问题,请参考以下文章

我们如何区分 Android M 的运行时权限中的从不询问和停止询问?

QuickBlox Android SDK 1.2 在 14 之前的 Android API 上不再运行

对android运行时权限感到困惑

Android 6.0 变更

低于 M 的 android 版本的 Android 运行时权限?

Android 6.0运行时权限简析及最佳实践