PACKAGE_REMOVED, а затем PACKAGE_ADDED запускаются вместе с PACKAGE_REPLACED Intent Action - PullRequest
20 голосов
/ 07 марта 2011

Все, что я пытаюсь сделать, - это обновлять мой список при каждой установке и удалении, но не при замене пакета. Так что основная проблема заключается в том, что намерения установки и удаления запускаются при каждом действии Заменить.

Итак, для этого я реализовал BroadcastReciever, как показано ниже

<receiver android:name =".IntentReceiverTest.AppReciever">
  <intent-filter>
         <action android:name="android.intent.action.PACKAGE_REMOVED"/>
         <action android:name="android.intent.action.PACKAGE_REPLACED"/>
         <action android:name="android.intent.action.PACKAGE_ADDED"/>
         <data android:scheme="package"/> 
  </intent-filter>
</receiver> 

При каждой замене я получаю 3 трансляции с действиями

  • Сначала с PACKAGE_REMOVED , которыйзапускает AppReciever
  • , затем после PACKAGE_ADDED , который снова запускает AppReciever
  • , а затем через несколько секунд PACKAGE_REPLACED , который снова запускает AppReciever

Поэтому, пожалуйста, предложите какой-нибудь лучший способ поймать только Заменить Действие

Или

способ остановить ранее запущенные Сервисы из-за действий PACKAGE_REMOVED и PACKAGE_ADDED .

1 Ответ

29 голосов
/ 07 апреля 2011

Просто отметьте intent.getBooleanExtra(Intent.EXTRA_REPLACING, false):

if (!intent.getAction().equals(Intent.ACTION_PACKAGE_REPLACED) &&
    intent.getBooleanExtra(Intent.EXTRA_REPLACING, false))
    return;
...