如果我只在Google Play商店中发布,我是否需要android.permission.WAKE_LOCK用于Google Play服务?

use*_*716 14 android google-analytics android-manifest android-permissions google-analytics-firebase

我正在尝试整合Google Analytics for Android.根据此处文档,它要求添加android.permission.WAKE_LOCK(提供下面的注释说明).我不清楚它.如果我仅在Google Play商店中发布该应用,我是否还需要此功能?

如果不是绝对必要,我真的不想要求用户获得额外的许可.

<!-- Optional permission for reliable local dispatching on non-Google Play devices -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
Run Code Online (Sandbox Code Playgroud)

特别是,我不明白这个说明在这里的含义是什么:

可选地,可以请求WAKE_LOCK权限以改进非Google Play设备上的调度.

Ian*_*Ian 39

更新:从Android 6开始(API级别23,WAKE_LOCK被归类为" 正常 "权限,意味着权限被自动授予.删除WAKE_LOCK权限通常会导致应用程序崩溃(见下文),所以我会避免这样做.


我处于相同的位置.我不想添加额外的权限,因为它会显着减少使用最新版本应用程序的人数(因为新权限意味着用户必须明确选择接收应用程序更新).

我相信我已经设法找到了一个解决方案,结合了这个问题的一些答案.

首先,将"tools"命名空间添加到应用程序的清单中

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools">
Run Code Online (Sandbox Code Playgroud)

其次,添加"WAKE_LOCK"权限,但使用remove选项

<uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" />
Run Code Online (Sandbox Code Playgroud)

现在,当我上传新的APK时,我可以看到不再需要该权限:

唤醒锁权限已删除

重要

似乎这种解决方案可能不再可行.我现在收到大量的RuntimeExceptions,其中包含消息"用户10182和当前进程都没有android.permission.WAKE_LOCK".

Fatal Exception: java.lang.RuntimeException
Unable to start receiver com.google.android.gms.measurement.AppMeasurementReceiver: java.lang.SecurityException: Neither user 10182 nor current process has android.permission.WAKE_LOCK.
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很棒的答案.如果Google能够记录如何避免使用唤醒锁定权限,那将是一件好事. (3认同)

shk*_*der 7

WAKE_LOCK

允许使用PowerManager WakeLocks防止处理器休眠或屏幕变暗.

在Google Play设备上,后台服务几乎总是作为"Google Play服务"运行,因此WAKE_LOCK不是必需的.

在非Google Play设备上,WAKE_LOCK有助于保持Google Analytics的调度流程/服务,使其有更多机会报告/上传数据.

编辑

此外,还不清楚权限组中的危险权限会发生什么,而不是用户可以通过"设置"控制的权限,例如SYSTEM_TOOLS.

https://commonsware.com/blog/2015/06/02/random-musings-m-developer-preview-bad.html