Intereting Posts
Создание текстового фильтра (например, быстрый поиск) для Spinner в Android Как удалить номер телефона из контакта в Android? Android – нажмите клавишу клавиатуры Переключение между двумя макетами в андроидной активности Ошибка проверки файла XAPK – файлы расширения APK Как правильно настроить Volley для загрузки изображений с URL-адреса Android установлен для просмотра видимости внутри ListAdapter Как передать дополнительные значения намерений в действие ACTION_OPEN_DOCUMENT_TREE Как зарегистрировать слушателя для изменения ориентации? Программно установить «? SelectableItemBackground» в Android-представлении Добавление покупки в приложение в существующее опубликованное приложение и его тестирование без публикации Нужна помощь в изменении имени моего пакета в eclipse Android выбрать изображение из галереи в PreferenceScreen? Как интегрировать Vitamio в Android Studio? Android Studio: ошибка сборки Gradle, не удается найти SDK и компилировать-сервер

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

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

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

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

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

Используйте диспетчер аварийных сообщений для запланированного обновления, а затем используйте класс создания и расширение службы или класса 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); } }