Нужно ли мне android.permission.WAKE_LOCK для Сервисов Google Play, если я выпущу только в Google Play Store?

Я пытаюсь интегрировать Google Analytics для 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" />

В частности, я не понимаю, что на самом деле означает эта заметка:

При желании можно запросить разрешение WAKE_LOCK для улучшения диспетчеризации на устройствах, не принадлежащих Google Play.

3 ответа

Решение

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

Обновление: Начиная с Android 6 (уровень API 23, WAKE_LOCK классифицируется как " обычное" разрешение, что означает, что разрешение предоставляется автоматически. Удаление разрешения WAKE_LOCK часто приводит к сбою приложений (см. Ниже), поэтому я не буду этого делать.


Я в том же положении. Я не хочу добавлять дополнительное разрешение, так как это значительно сократит число людей, использующих последнюю версию приложения (поскольку новые разрешения означают, что пользователь должен явно выбрать получение обновления приложения).

Я считаю, что мне удалось найти решение, объединив несколько ответов на этот вопрос SO.

Сначала добавьте пространство имен "tools" в манифест приложения.

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

Во-вторых, добавьте разрешение "WAKE_LOCK", но используйте опцию удаления

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

Теперь, когда я загружаю новый APK, я вижу, что разрешение больше не требуется:

разрешение пробуждения удалено

Важный

Похоже, что это решение больше не может быть жизнеспособным. Сейчас я получаю огромное количество исключений RuntimeException с сообщением "Ни у пользователя 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.

При удалении WAKE_LOCK также удалите AnalyticsReceiver и AnalyticsService.

Так написано на этом сайте. http://coffeee.hatenablog.com/entry/2017/11/26/035828

  1. открыть AndroidManifest.xml
  2. нажмите на вкладку "Marged Manifest"Объединенный Манифест
  3. щелкните правой кнопкой мыши на WAKE_LOCK и удалитеУдалить WAKE_LOCK
  4. удалить AnalyticsReceiver и AnalyticsServiceУдалить приемник и обслуживание

Удачи