Intereting Posts
Изменение цвета текста (строки) при отправке сообщения электронной почты System.TypeLoadException: не удалось разрешить тип с токеном 01000019 Неизвестная ошибка: невозможно построить: файл dx.jar не был загружен из папки SDK Невозможно удалить дополнительное пространство между элементами CardView – Scrollable RecyclerView Нужна помощь, связанная с Неустранимым Исключением, вызванным java.lang.IncompatibleClassChangeError Как добавить кнопку в информационное окно маркера? Отредактируйте AndroidManifest при компиляции для удаления API-ключа Как настроить пользовательский ListView в android Fragement? Как получить цвет фона в строке состояния, чтобы показать colorPrimaryDark Запуск Twitter в Twitter Неправильные размеры изображения в android при использовании растрового изображения Android SQLite: параметр nullColumnHack в методах вставки / замены Android: использование AUTO-CANCEL при уведомлении, когда ваше приложение работает в фоновом режиме Редактировать текст с меткой внутри в android Когда вы отключаете основной поток, как я могу как можно быстрее запустить какой-то код для основного потока?

Как автоматически обновлять постоянно действующее приложение для Android без взаимодействия с пользователем

У нас есть приложение в Google Play Store, которое работает на переднем плане непрерывно. Устройства, на которых он работает, находятся вне нашего контроля и не внедрены. Они работают на Android 4.2 или 4.4.

Наша цель – обновить приложение до новейшей версии, которую мы выпускаем через Play Store без взаимодействия с пользователем. Перезапуск устройства будет единственным приемлемым вариантом «взаимодействия».

Мы обнаруживаем, что запущенное приложение не обновляется автоматически, когда оно выполняется, даже если включено «автоматическое обновление».

Каков способ достижения нашей цели?

Solutions Collecting From Web of "Как автоматически обновлять постоянно действующее приложение для Android без взаимодействия с пользователем"

Используйте диспетчер аварийных сообщений для запланированного обновления, а затем используйте класс создания и расширение службы или класса IntentService. Проверьте, есть ли подключение к Интернету, если да, чтобы продолжить обновление следующим образом: Проверьте эту ссылку. Службы Android – Учебник. Таким образом вы можете обновить, даже не показывая свою активность, используя сервис.

Создание диспетчера аварийных сигналов:

Calendar cal = Calendar.getInstance(); Intent intent = new Intent(this, MyService.class); PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); // Start every 30 seconds alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

Для обслуживания:

  public class DownloadService extends IntentService { private int result = Activity.RESULT_CANCELED; public static final String URL = "urlpath"; public static final String FILENAME = "filename"; public static final String FILEPATH = "filepath"; public static final String RESULT = "result"; public static final String NOTIFICATION = "com.vogella.android.service.receiver"; public DownloadService() { super("DownloadService"); } // will be called asynchronously by Android @Override protected void onHandleIntent(Intent intent) { String urlPath = intent.getStringExtra(URL); String fileName = intent.getStringExtra(FILENAME); File output = new File(Environment.getExternalStorageDirectory(), fileName); if (output.exists()) { output.delete(); } InputStream stream = null; FileOutputStream fos = null; try { URL url = new URL(urlPath); stream = url.openConnection().getInputStream(); InputStreamReader reader = new InputStreamReader(stream); fos = new FileOutputStream(output.getPath()); int next = -1; while ((next = reader.read()) != -1) { fos.write(next); } // successfully finished result = Activity.RESULT_OK; } catch (Exception e) { e.printStackTrace(); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } publishResults(output.getAbsolutePath(), result); } private void publishResults(String outputPath, int result) { Intent intent = new Intent(NOTIFICATION); intent.putExtra(FILEPATH, outputPath); intent.putExtra(RESULT, result); sendBroadcast(intent); } } Сервис  public class DownloadService extends IntentService { private int result = Activity.RESULT_CANCELED; public static final String URL = "urlpath"; public static final String FILENAME = "filename"; public static final String FILEPATH = "filepath"; public static final String RESULT = "result"; public static final String NOTIFICATION = "com.vogella.android.service.receiver"; public DownloadService() { super("DownloadService"); } // will be called asynchronously by Android @Override protected void onHandleIntent(Intent intent) { String urlPath = intent.getStringExtra(URL); String fileName = intent.getStringExtra(FILENAME); File output = new File(Environment.getExternalStorageDirectory(), fileName); if (output.exists()) { output.delete(); } InputStream stream = null; FileOutputStream fos = null; try { URL url = new URL(urlPath); stream = url.openConnection().getInputStream(); InputStreamReader reader = new InputStreamReader(stream); fos = new FileOutputStream(output.getPath()); int next = -1; while ((next = reader.read()) != -1) { fos.write(next); } // successfully finished result = Activity.RESULT_OK; } catch (Exception e) { e.printStackTrace(); } finally { if (stream != null) { try { stream.close(); } catch (IOException e) { e.printStackTrace(); } } if (fos != null) { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } } publishResults(output.getAbsolutePath(), result); } private void publishResults(String outputPath, int result) { Intent intent = new Intent(NOTIFICATION); intent.putExtra(FILEPATH, outputPath); intent.putExtra(RESULT, result); sendBroadcast(intent); } }