Как узнать, что мое приложение для Android было обновлено, чтобы сбросить тревогу?
Я заметил, что сигнал тревоги отключается, когда приложение, которое устанавливает этот сигнал тревоги был обновлен. Это правда ?
до сих пор, я использовал SharedPreferences
с FIRST_RUN
ключ для того, чтобы знать, если это первый запуск моего приложения. Если я не найду этот ключ, я включаю будильник и устанавливаю FIRST_RUN
в false, иначе я ничего не делаю.
но я заметил также, что эти предпочтения остаются неизменными между обновлением приложения !
Итак, после обновления, FIRST_RUN
ключ уже false, поэтому я ничего не делаю, пока мой будильник должен быть включен.
как справиться с таким случаем ?
спасибо заранее
4 ответа:
Я никогда не пробовал это сам, но как насчет создания
BroadcastReceiver
что слушаетACTION_PACKAGE_REPLACED
намерения?Я думал об этом раньше, но я не уверен, есть ли проблема с курицей и яйцом или нет (например, отправляется ли намерение до того, как новое обновленное приложение сможет его получить?). Хотя попробовать стоит.
решение Даниэля Лью:
нужен приемник со следующими строками в манифесте:
<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
для запуска любого обновления любого приложения.
просто послушай
android.intent.action.MY_PACKAGE_REPLACED
... ЭтоINTENT
уведомит вас, если новая версия вашего приложения была установлена поверх существующейПримечание: это намерение может доступно, начиная с API 12
для ОС 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>