BroadcastReceiverで受信できる「PACKAGE_〜」のアクションについて調べてみました。
おこなったのは以下のIntentFilterを設定したBroadcastReceiverで受信したActionをログに表示するというもの。
Androidのソースを読んで詳細に調べたわけでなく、動作を確認しただけです。
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />
<action android:name="android.intent.action.PACKAGE_CHANGED" />
<action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
<action android:name="android.intent.action.PACKAGE_FIRST_LAUNCH" />
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
<action android:name="android.intent.action.PACKAGE_INSTALL" />
<action android:name="android.intent.action.PACKAGE_NEEDS_VERIFICATION" />
<action android:name="android.intent.action.PACKAGE_REMOVED" />
<action android:name="android.intent.action.PACKAGE_REPLACED" />
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
<action android:name="android.intent.action.PACKAGE_VERIFIED" />
<data android:scheme="package" />
</intent-filter>
確認した端末は以下の3つ。括弧内はAndroidのバージョンです。
・HTC Desire (2.3.3)
・HTC Evo 3D (4.0.3)
・HTC J One (4.2.2)
以下が「操作」とその時に受信した「Broadcast」です。
--------------------------------
■インストール
android.intent.action.PACKAGE_ADDED
■アップデート
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_ADDED
android.intent.action.PACKAGE_REPLACED
■アンインストール
android.intent.action.PACKAGE_REMOVED
android.intent.action.PACKAGE_FULLY_REMOVED (4.0以降のみ)
■強制停止
android.intent.action.PACKAGE_RESTARTED
■データ削除
android.intent.action.PACKAGE_RESTARTED
android.intent.action.PACKAGE_DATA_CLEARED
■無効化/有効化 (4.0以降のみ)
android.intent.action.PACKAGE_CHANGED (4.0以降のみ)
■SDカードへ移動/携帯端末へ移動
(なし)
--------------------------------
アップデートはADDEDもREMOVEDも受信するのがめんどくさいですね。
インストール/アップデート/アンインストールで何らかの処理を行いたい場合、単純にADDEDやREMOVED毎に処理を行ってしまうと、アップデート時には2回処理されてしまいます。
アップデート時は受信したIntentのExtraに「android.intent.extra.REPLACING」というキーで「true」が詰められているようなので、それを使って判断するのが良さそうです。
(Intentに EXTRA_REPLACING として定義されています)
あと「SDカードへの移動/携帯端末へ移動」も何かしらBroadcastされるかと思ってましたが何も来ませんでした。
また、以下はそれぞれのアクションがどのAPIレベルで追加されたかの一覧です。
android.intent.action.PACKAGE_ADDED (Lv1)
android.intent.action.PACKAGE_CHANGED (Lv1)
android.intent.action.PACKAGE_INSTALL (Lv1) (deprecated in Lv14)android.intent.action.PACKAGE_REMOVED (Lv1)
android.intent.action.PACKAGE_RESTARTED (Lv1)
android.intent.action.PACKAGE_DATA_CLEARED (Lv3)
android.intent.action.PACKAGE_REPLACED (Lv3)
android.intent.action.PACKAGE_FIRST_LAUNCH (Lv12)android.intent.action.PACKAGE_FULLY_REMOVED (Lv14)
android.intent.action.PACKAGE_NEEDS_VERIFICATION (Lv14)
android.intent.action.PACKAGE_VERIFIED (Lv17)いくつか確認できてないActionがあります。
FIRST_LAUNCHなんて受信できたら何かおもしろそうなことが出来そうな気がしますが、今回確認した範囲では受信しなかったです。
何かpermissionでも必要なんでしょうか。
どの操作で、どのBroadcastが届くのか、また調べるのがめんどくさいのでメモとして残しました。
今回はここまで。
posted by t2low at 21:00|
Android