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


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

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

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

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

как справиться с таким случаем ?

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

4 62

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>