Как разрешить автоматическое обновление приложений в Play Store только при подключении?

Я хотел бы, чтобы приложения обновлялись автоматически, когда мой телефон подключен к сети (заряжается) и подключен к Wi-Fi. Я легко могу разрешить автообновление только при включенном вайфае с соответствующей опцией в настройках Play Store, но не предотвратить автообновления, если телефон работает от батареи.

Это вызывает ненужный разряд батареи, когда я использую свой телефон по Wi-Fi дома. Учитывая, что автоматическое обновление приложений — это скорее работа демона, чем критическая по времени задача, я не могу поверить, что это не стандартная стратегия энергосбережения.

Знаете ли вы какие-либо приложения или системные обходные пути (в том числе, если устройство рутировано) для достижения этой цели?

Ответы (4)

Примечание :

Следующее решение:

  • протестировано на Android 4.2.1, COS12 (Android 5.0.2) и CM12.1 (Android 5.1.1) — все они работают под управлением Play Store версии 6.0.5 1
  • требуется рутированный Android
  • вот короткая демонстрация решения

Просматривая манифест Play Store, я сделал обоснованное предположение, что только следующий сервис, вероятно, является инициатором автоматического обновления приложений по Wi-Fi.

com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager$CheckWifiAndAutoUpdate

Я играл с этим сервисом в нескольких условиях на разных устройствах и нашел его полезным для рассматриваемой цели. Само собой разумеется, что для параметра автоматического обновления приложений в Play Store должно быть установлено значение «Автоматическое обновление приложений только через Wi-Fi».

Вот что вы можете сделать: Установите приложение , которое может выполнять ряд действий, когда источник питания и Wi-Fi подключены, а затем отключены. Я использовал Tasker ( пробная версия ; руководство пользователя) в качестве приложения для автоматизации.

  • Профиль: Настройте два контекста. См. Как создать профиль с несколькими контекстами в Tasker? за любую помощь

    • Состояние → Мощность → Источник: выберите его
    • Состояние → Сеть → Подключено к Wi-Fi → заполните данные в соответствии с вашими потребностями или оставьте все или некоторые из них нетронутыми

Нам понадобятся две задачи: задача входа и задача выхода. Смотрите мой ответ здесь для соответствующей помощи.

  • Введите задачу : (Действия):

    1. Код → Запустить оболочку

      • Команда:

        pm enable com.android.vending/com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager\$CheckWifiAndAutoUpdate;
        я принудительно останавливаю com.android.vending;
        am startservice com.android.vending/com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager\$CheckWifiAndAutoUpdate
        
      • поставить галочку Использовать рут
    2. При желании вы можете добавить одно или несколько действий, чтобы уведомить себя о начале процедуры обновления. Я использовал Alert → Flash, чтобы уведомить себя с помощью всплывающего уведомления.
  • Выход из задачи : (Действия):

    Для этой задачи требуются установленные апплеты Busybox. См. раздел Как установить отсутствующие инструменты командной строки на устройство Android? за соответствующую помощь.

    1. Сеть → Тестовая сеть

      • Тип: Мобильные данные включены
      • Сохранить результат в:%Mdata
    2. Код → Запустить оболочку

      • Команда:

        данные svc отключить;
        svc wifi отключить;
        я принудительно останавливаю com.android.vending;
        я принудительно останавливаю com.android.providers.downloads;
        down_path=$(запрос содержимого --uri content://downloads/my_downloads --projection _data --where "notificationpackage='com.android.vending'");
        [[ "$down_path" != "Ничего не найдено." ]] && эхо $down_path | sed 's/.*=//g' | xargs rm -f || эхо продолжить;
        удаление содержимого --uri content://downloads/my_downloads --where "notificationpackage='com.android.vending'"
        pm отключить com.android.vending/com.google.android.finsky.autoupdate.ReschedulerUsingAlarmManager\$CheckWifiAndAutoUpdate;
        SVC включить Wi-Fi;
        [[ "%Mdata" == "yes" ]] && svc data enable || эхо ничего не делает;
        
      • поставить галочку Использовать рут
    3. Опять же, чтобы уведомить себя, используйте любое действие по вашему выбору.

Что делают эти задачи?

Когда условия для обоих контекстов выполняются, запускается задача ввода. Команды в этой задаче выполняют следующие действия в последовательном порядке:

  • включить вышеупомянутый сервис Play Store
  • принудительная остановка Play Store
  • запустить указанный сервис Play Store

И это все для начала автообновления.

После того, как он останется активированным, всякий раз, когда профиль деактивируется (просто потому, что условие для контекста больше не выполняется), будет запускаться задача выхода. Эта задача выхода выполняет следующие шаги в последовательном порядке:

  • хранить состояние (включено/отключено) мобильных данных в переменной Mdata
  • работа этих команд заключается в следующем:

    • отключить мобильные данные
    • отключить Wi-Fi
    • принудительная остановка Play Store
    • принудительно остановить менеджер загрузок

    Я заметил, что если обновление (выполняется загрузка) для приложения прерывается из-за недоступности Wi-Fi, индикатор выполнения (уведомление) закрывается, статус выполнения сохраняется в строке в таблице загрузок загрузки базы данных .дб . (Эта база данных находится в каталоге данных диспетчера загрузок.) Эта строка также содержит расположение частично загруженного файла.

    Чтобы убедиться, что автоматическое обновление не произойдет при следующем успешном подключении к Wi-Fi, и убедиться, что оно никогда не произойдет, когда профиль не выполняет задачу входа, выполните следующие действия остальных команд:

    • извлечь расположение частично загруженного файла из значения в столбце _data, соответствующем строке, определенной com.android.vending как пакет уведомлений. Мы стремимся удалить этот файл. Это небольшая жертва.
    • если в _data действительно есть путь к файлу , используйте его для удаления файла, на который он указывает.
    • удалите эту строку, иначе она будет прочитана диспетчером загрузок при изменении сетевого подключения (повторном подключении к Wi-Fi) и автоматическое обновление начнется снова.
    • отключите вышеупомянутый сервис Play Store, чтобы автообновление никогда не начиналось само по себе
    • включить Wi-Fi
    • включить мобильные данные, если они были включены до запуска этой задачи.

1 На момент создания первой версии этого ответа текущая версия Play Store определенно не 6.0.5, а выше. Однако пока ни одно из моих устройств не получило дальнейших обновлений Play Store.

Сценарий у меня не работал, поэтому в качестве небольшого шага по устранению неполадок я вручную запустил команду «запрос содержимого» и заметил, что она действительно приводит к строке «Результат не найден», поэтому следующая строка «удаление содержимого» ничего не делает, поскольку условие ЕСЛИ неверно.

Самое близкое, что я подошел, это объединение двух настроек. Я делаю это на двух устройствах, одно под управлением Android 4.4.4 (KitKat), а другое под управлением Android 5.0.2 (Lollipop).

  • Системные настройки → Wi-Fi → Дополнительно → Не отключать Wi-Fi во время сна → Только при подключении к сети
  • Play Маркет → Настройки → Автообновление приложений → Автообновление приложений только через Wi-Fi

Кажется, что он получает обновления, по крайней мере, немного чаще, когда он подключен. Это не идеально, но это неплохое половинчатое решение, и оно не требует Tasker или рутирования.

Это можно сделать с помощью Tasker (платное приложение). В Tasker профиль может быть определен при следующих условиях. У него небольшая кривая обучения, но это приложение может заменить почти многие приложения.

Ниже приведен образец профиля,

Когда батарея > X% , включен Wi -Fi и включена зарядка

Включить автоматическую синхронизацию

Это всего лишь образец, вы можете указать условия в зависимости от ваших требований. Поскольку это отдельная тема, я бы посоветовал вам использовать Google Tasker на форумах xda.

Разве это не включает/отключает автоматическую синхронизацию всех данных? Необходимость вручную обновлять каждую другую службу только для того, чтобы Play Store не обновлялся автоматически, кажется далеко не идеальным.

В настоящее время в Google Code открыт тикет, поэтому, надеюсь, эта функция будет добавлена ​​в будущем выпуске.

https://code.google.com/archive/p/android-developer-preview/issues/1511

Проблема, похоже, закрыта, решения нет ни там, ни в конечном продукте.