Примітка :
Наступне рішення:
- тестується на 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
- Форс-магазин Play Store
- запустити послугу Play Store
І це все, щоб почалося автоматичне оновлення.
Залишившись активованою, щоразу, коли профіль деактивується (просто тому, що умова контексту вже не відповідає) завдання виходу буде виконуватися. Це завдання виходу виконує наступні кроки в послідовному порядку:
- зберігати стан (увімкнено / вимкнено) мобільних даних у змінній Mdata
Завдання цих команд:
- вимкнути мобільні дані
- відключити Wi-Fi
- Форс-магазин 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.