Do I need android.permission.WAKE_LOCK for Google Play Services if I only release in Google Play Store?

与世无争的帅哥 提交于 2019-11-28 11:59:57

WAKE_LOCK

Allows using PowerManager WakeLocks to keep processor from sleeping or screen from dimming.

On Google Play devices, a background service is almost always running as "Google Play Services", so WAKE_LOCK is not required.

On non-Google Play devices, WAKE_LOCK helps keeping the dispatching process / service of Google Analytics alive so it has more chances to report / upload data.

EDIT

Also, it is unclear what happens to dangerous permissions in permission groups that are not ones that the user can control via Settings, such as SYSTEM_TOOLS.

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

Ian

Update: As of Android 6 (API level 23, WAKE_LOCK is classed as a "normal" permission, meaning the permission is automatically granted. Removing the WAKE_LOCK permission will often cause apps to crash (see below) so I would avoid doing it.


I'm in the same position. I don't want to add an extra permission as it will significantly reduce the number of people using the latest version of the app (as new permissions mean the user must explicitly opt in to receive the app update).

I believe I have managed to find a solution by combining a few of the answers on this SO question.

First, add "tools" namespace to the app's manifest

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

Second, add the "WAKE_LOCK" permission but use the remove option

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

Now, when I upload a new APK I can see the permission is no longer required:

Important

It seems like this solution may no longer be viable. I'm now getting a huge number of RuntimeExceptions being thrown with the message "Neither user 10182 nor current process has 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.
cobbee

When removing WAKE_LOCK, also remove AnalyticsReceiver and AnalyticsService.

That way is written on this site. http://coffeee.hatenablog.com/entry/2017/11/26/035828

  1. open AndroidManifest.xml
  2. click the tab of "Marged Manifest"

  3. right click on WAKE_LOCK and remove

  4. remove AnalyticsReceiver and AnalyticsService

Good Luck

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!