Подтвердить что ты не робот

Как узнать, что мое приложение для Android было обновлено до reset тревоги?

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

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

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

Итак, после обновления ключ FIRST_RUN уже имеет значение false, поэтому я ничего не делаю, пока мой будильник должен быть включен.

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

Требуется приемник со следующими строками в манифесте:

<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 при любом обновлении любого приложения.

Ответ 3

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

Примечание. Это намерение доступно, начиная с API 12

Ответ 4

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

<receiver android:name=".MyBroadcastReceiver">
  <intent-filter>
    <action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
  </intent-filter>
</receiver>