Нужен ли мне файл android.permission.WAKE_LOCK для сервисов Google Play, если я только выпущу его в Google Play Store?
Я пытаюсь интегрировать Google Analytics для Android. В соответствии с документацией , он просит добавить android.permission.WAKE_LOCK
(содержит примечание к примечанию ниже). Я не понимаю этого ясно. Если я выпущу приложение ТОЛЬКО в Google Play Store, мне все еще нужно это?
Я действительно не хочу запрашивать у пользователей дополнительное разрешение, если это не является абсолютно необходимым.
<!-- Optional permission for reliable local dispatching on non-Google Play devices -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
В частности, я не понимаю, что эта заметка на самом деле означает здесь:
При желании можно запросить разрешение WAKE_LOCK для улучшения диспетчеризации на устройствах, отличных от Google Play.
Ответы
Ответ 1
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
Ответ 2
Обновление: Начиная с Android 6 (уровень API 23, WAKE_LOCK классифицируется как " normal", что означает разрешение автоматически предоставляется. Удаление разрешения 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, я вижу, что разрешение больше не требуется:
![разрешение на блокировку после пробуждения]()
Внимание!
Похоже, что это решение больше не может быть жизнеспособным. Теперь я получаю огромное количество 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.
Ответ 3
При удалении WAKE_LOCK также удалите AnalyticsReceiver и AnalyticsService.
Этот способ написан на этом сайте.
http://coffeee.hatenablog.com/entry/2017/11/26/035828
- открыть AndroidManifest.xml
- щелкните вкладку "Маржинальный манифест"
![Merged Manifest]()
- щелкните правой кнопкой мыши на WAKE_LOCK и удалите
![Remove WAKE_LOCK]()
- удалить AnalyticsReceiver и AnalyticsService
![Remove Receiver and Service]()
Удача