12

我正在尝试整合Google Analytics for Android。根据documentation here,它要求添加android.permission.WAKE_LOCK(提供下面的注释注释)。我不明白这一点。如果我只在Google Play Store中发布应用程序,我还需要这个吗?如果我只在Google Play商店中发布,是否需要Google Play服务的android.permission.WAKE_LOCK?

如果这不是绝对必要的,我真的不想问用户额外的权限。

<!-- Optional permission for reliable local dispatching on non-Google Play devices --> 
<uses-permission android:name="android.permission.WAKE_LOCK" /> 

特别是,我不明白这是什么音符实际上意味着here

一个可选许可WAKE_LOCK可以请求提高调度的非谷歌播放设备。

+1

它说“可选权限”。 – Carcigenicate

+0

@Carcigenicate是的我明白,只是不清楚为什么以及如何帮助? – user1406716

+0

我不确定它如何帮助非谷歌商店,但似乎除了问题。如果他们说它是可选的并用于你不需要的东西,我会说可以放心地说你可以忽略它。请注意,商店中的许多应用程序都没有唤醒锁权限。 – Carcigenicate

回答

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

36

更新:随着Android 6(API级别23,WAKE_LOCK被归类为“normal”的权限,这意味着权限自动授予卸下WAKE_LOCK权限往往会导致应用程序崩溃。 (见下文),所以我会避免这样做。


我在同样的位置来的。我不想增加额外的许可,因为它会使用最新的已经显著减少的人数应用程序的rsion(因为新的权限意味着用户必须明确选择接收应用程序更新)。

我相信我已经设法通过结合this SO question上的一些答案来找到解决方案。

首先,添加 “工具” 命名空间的应用程序的清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools"> 

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

<uses-permission android:name="android.permission.WAKE_LOCK" tools:node="remove" /> 

现在,当我上传新的APK我能看到的权限不再需要:

wake lock permission removed

重要

看来这种解决方案可能不再可行。我现在正在使用消息“无论用户10182还是当前进程都有android.permission.WAKE_LOCK”都引发了大量的RuntimeExceptions。

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. 
+0

这种技术适用于我。也适用于不在Manifest但在上载时显示的新权限。 – Masum

+2

这是一个很棒的答案。如果Google能记录如何避免使用唤醒锁定权限,那将是一件好事。 – henry000

+0

真棒回答! tnx –

2

删除WAKE_LOCK时,还要删除AnalyticsReceiver和AnalyticsService。

这样写上这个网站。 http://coffeee.hatenablog.com/entry/2017/11/26/035828

  1. 开放的AndroidManifest.xml
  2. 单击 “Marged清单” Merged Manifest
  3. 的标签右键点击WAKE_LOCK和删除 Remove WAKE_LOCK
  4. 删除AnalyticsReceiver和AnalyticsService Remove Receiver and Service

好运气