Как узнать, что мое приложение для Android было обновлено до reset тревоги?
Я заметил, что будильник отключен, когда приложение, устанавливающее этот сигнал тревоги, было обновлено. Это правда?
До сих пор я использовал SharedPreferences
с ключом FIRST_RUN
, чтобы узнать, является ли это первым запуском моего приложения. Если я не нахожу этот ключ, я включаю будильник и устанавливаю FIRST_RUN
в значение false, иначе я ничего не делаю.
Но я также заметил, что эти настройки остаются неизменными между обновлением приложений!
Итак, после обновления ключ FIRST_RUN
уже имеет значение false, поэтому я ничего не делаю, пока мой будильник должен быть включен.
Как обращаться с таким случаем?
Заранее спасибо
Ответы
Ответ 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>