2011-03-07 58 views
19

所有我想要做的就是更新我對每個列表安裝&卸載但在包裝更換。所以主要問題是安裝&卸載意圖是發動每個替換操作。PACKAGE_REMOVED&然後PACKAGE_ADDED與PACKAGE_REPLACED行動意圖沿發射

所以 爲此,我實現了一個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操作。

+0

我失去了一些關於您的問題或答案是簡單的「不過濾你不想意圖」 ......? – Blrfl 2011-03-07 11:29:17

+2

@Blrfl我只需要'PACKAGE_REMOVED'&'PACKAGE_ADDED'只有當實際的軟件包被**安裝/卸載**,而不是當它們被**替換時**。閱讀我的問題的第3行。 – 100rabh 2011-03-07 11:53:50

+0

閱讀你意圖過濾器的第二行,然後閱讀Birfl的評論,然後再讀一遍你的意圖過濾器的第二行。 – pawelzieba 2011-03-31 15:25:37

回答

27

只是檢查intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)

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

'Intent.EXTRA_REPLACING'總是添加到'action.PACKAGE_REMOVED'和'action_PACKAGE_ADDED'當應用程序更新。在正常安裝和卸載時,這是錯誤的。 – suku 2016-07-06 12:08:23