android M 之前的运行时权限(api 14 及以上)

Runtime permission before android M (api 14 and up)

有没有办法为 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"/>

有更好的方法吗?

Is there a way to implement runtime permission for apps that target API 14 and up?

如果你的意思是"hide permissions from the user at install time, and only ask for them at runtime",那么答案是否定的。

Is there a better way of doing this?

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

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

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

然而,这确实增加了复杂性:

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

  • 你必须使用PackageManager等来判断插件是否存在并且可以使用

  • 你必须面对一些人,他们会在没有主应用程序的情况下安装插件,并且想知道发生了什么事