Android OSから発行されるブロードキャストインテントの受信
Androidではいくつかの標準ブロードキャストインテントが定義されていて、システムの様々な状態変化を取得できるようになっています。今回はアプリのアンインストールの検知を試してみました。
# 最初、機内モードIN/OUTを検知しようとしてうまく検知できず…
【参考】 android.content.Intent のリファレンスの Standard Broadcast Actions の項
http://developer.android.com/reference/android/content/Intent.html
テスト環境は以下の通りです。
AndroidManifest.xmlの記述
試してみた限りでは、intent-filter中の は必須で、これがないとロードキャストレシーバが起動されませんでした。
<application> .... <receiver android:name=".UninstallReceiver"> <intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> </application>
Broadcast Receiverの作成
以下のようなブロードキャストレシーバを記述します。AndroidManifestの記述に従って、PACKAGE_REMOVEDが発行されるとUninstallReceiverがインスタンス化され、onReceiverが呼び出されることになります。ここでは、別のアクティビティ (Main) を起動する処理を行っています。
UninstallReceiver.java
public class UninstallReceiver extends BroadcastReceiver { private static final String TAG = "DEBUG"; @Override public void onReceive(Context context, Intent received_intent) { Log.d(TAG, "receiver activated"); Intent intent = new Intent(context, Main.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.setAction(Intent.ACTION_MAIN); context.startActivity(intent); } } }