2012年2月18日土曜日

パッケージが更新された(バージョンが上がった)時のBroadcastについて

パッケージが更新された場合、PACKAGE_REMOVED→PACKAGE_ADDED→PACKAGE_REPLACED
の順番でBroadcastが投げられる。
個人的には違和感ありまくりなんだけど、内部的には一旦削除してから追加していて
このような挙動になっているんだと思う。(確かめてはないけど...)

しかし、パッケージ更新時のみPACKAGE_REMOVEDやPACKAGE_ADDEDの処理を
スキップしたいことはあると思う。そんな時は以下のようにインテントからデータを
抜き出して判定してやればいい。
  1. public class PackageMonitor extends BroadcastReceiver {  
  2.   
  3.     @Override  
  4.     public void onReceive(Context context, Intent intent) {  
  5.   
  6.         String action = intent.getAction();  
  7.   
  8.         // パッケージ更新の場合はスキップ  
  9.         if (intent.getBooleanExtra(Intent.EXTRA_REPLACING, false)) {  
  10.             return;  
  11.         }  
  12.   
  13.         if (Intent.ACTION_PACKAGE_ADDED.equals(action)) {  
  14.             // パッケージが追加された時にしたい処理  
  15.         } else if (Intent.ACTION_PACKAGE_REMOVED.equals(action)) {  
  16.             // パッケージが削除された時にしたい処理  
  17.         }  
  18.     }  
  19.   
  20. }  

0 件のコメント:

コメントを投稿