Примечание :
Следующее решение:
- протестирован на 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 ) в качестве приложения автоматизации.
Нам понадобятся две задачи: входная задача и выходная задача. Смотрите мой ответ здесь для получения справки.
Введите задачу : (Действия):
Код → Запустить Shell
- При желании вы можете добавить одно или несколько действий, чтобы уведомить себя о начале процедуры обновления. Я использовал Alert → Flash, чтобы уведомить себя через тост.
Выйти из задачи : (Действия):
Для этой задачи требуются установленные апплеты Busybox. См. Как установить недостающие инструменты командной строки на устройство Android? для связанной помощи.
Сеть → Тестовая сеть
- Тип: мобильные данные включены
- Сохранить результат в:
%Mdata
Код → Запустить Shell
- Опять же, чтобы уведомить себя, используйте любое действие по вашему выбору.
Что делают эти задачи?
При выполнении условий для обоих контекстов запускается задача ввода. Команды в этой задаче делают эти вещи в последовательном порядке:
- включить вышеуказанный сервис 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.