Как узнать, что мое приложение Android было обновлено для сброса тревоги? - PullRequest
67 голосов
/ 25 января 2010

Я заметил, что сигнал тревоги отключен, когда приложение, которое устанавливает этот сигнал тревоги, было обновлено. Это правда?

До сих пор я использовал SharedPreferences с клавишей FIRST_RUN, чтобы узнать, является ли это первым запуском моего приложения. Если я не нахожу этот ключ, я включаю будильник и устанавливаю FIRST_RUN в ложь, иначе я ничего не делаю.

Но я также заметил, что эти настройки остаются неизменными между обновлениями приложения!

Таким образом, после обновления клавиша FIRST_RUN уже имеет значение false, поэтому я ничего не делаю, пока нужно включить сигнализацию.

Как обращаться с таким делом?

Заранее спасибо

Ответы [ 4 ]

89 голосов
/ 25 января 2010

Решение Дэниела Лью:

Нужен получатель со следующими строками в манифесте:

<receiver android:name=".OnUpgradeReceiver">
  <intent-filter>
    <action android:name="android.intent.action.PACKAGE_REPLACED" />
    <data android:scheme="package" android:path="your.app.package" />
  </intent-filter>
</receiver>

android:path используется для предотвращения запуска OnUpgradeReceiver при любом обновлении любого приложения.

58 голосов
/ 25 января 2010

Я никогда не пробовал это сам, но как насчет создания BroadcastReceiver, который слушает ACTION_PACKAGE_REPLACED Intent?

Я уже думал об этом раньше, но я не уверен, есть ли у него проблема курицы и яйца (например, отправляется ли Намерение раньше, чем новое обновленное приложение сможет его получить?) Хотя стоит попробовать.

21 голосов
/ 03 февраля 2014

Просто слушайте android.intent.action.MY_PACKAGE_REPLACED ... Этот INTENT уведомит вас, если новая версия вашего приложения была установлена ​​поверх существующей

Примечание. Эта возможность доступна начиная с API 12

.
20 голосов
/ 27 января 2016

Для ОС Android версии 12 и выше необходимо зарегистрировать BroadcastReceiver с действием ACTION_MY_PACKAGE_REPLACED

<receiver android:name=".MyBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
  </intent-filter>
</receiver>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...