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

14

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

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

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

Эрвин Майер
источник

Ответы:

4

Примечание :

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

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

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

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

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

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

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

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

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

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

    1. Код → Запустить Shell

      • Команда:

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

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

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

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

      • Команда:

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

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

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

  • включить вышеуказанный сервис Play Store
  • Force-Stop Play Store
  • запустить сервис Play Store

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

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

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

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

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

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

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

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

Повелитель огня
источник
Сценарий не работал для меня, так что, просто как небольшой шаг устранения неполадок, я вручную выполнил команду «content query» и заметил, что она действительно приводит к строке «No result found», поэтому следующая строка «delete content» ничего не делает, так как условие ЕСЛИ не верно.
prl77
2

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

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

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

Benjamin Oakes
источник
0

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

Ниже приведен пример профиля,

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

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

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

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