Androidでは、アプリケーションのインストールが完了したことを検知することが可能です。
アプリケーションのインストールの完了を検知できれば、アプリのインストールに合わせて起動するようなアプリケーションを作成することも可能です。
<2012/01/31 onReceiveメソッドからのActivityの起動について追記しました。>
アプリケーションのインストールが完了すると、BroadcastIntentが投げられます。
投げられたIntentをBroadcastReceiverでキャッチすることで、インストール完了時に処理を行えるようにします。
今回は、アプリケーションのインストールが完了した際に、以下のようなActivityを起動してみたいと思います。
それでは続きで詳しく見ていきましょう。
BroadcastReceiverの作成
アプリケーションのインストールが完了すると、「android.intent.action.PACKAGE_ADDED」のBroadcastIntentが発生します。
つまり、これをキャッチできるようなBroadcastReceiverを作成すれば、インストールの完了を検知できます。
BroadcastReceiverはAndroidManifest.xmlに以下のように定義します。
AndroidManifest.xml
<application android:icon="@drawable/ic_launcher" android:label="@string/app_name" > (...省略...) <receiver android:name="org.techbooster.sample.installreferrer.InstallReciever" > <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <data android:scheme="package"/> </intent-filter> </receiver> </application>
7行目で、actionのnameプロパティーに android.intent.action.PACKAGE_ADDED を指定しています。
これで、IntentがBroadcastされると同時にreceiverタグのname属性に指定したBroadcastReceiver(を継承したクラス)が起動することになります。
また、パッケージを指定して起動するために、8行目でschemeに”package”を指定する必要があるので注意します。
なお、BroadcastReceiver内での処理は以下のようになっています。
public class InstallReciever extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { intent.setClass(context, InstallNotifiActivity.class); context.startActivity(intent); } }
BroadcastReceiver内からActivityを起動するには、onReceiveメソッドの引数にintentが渡されてくるので、これを利用して起動したいActivity(ここでは InstallNotifiActivity.class)を呼び出すようにします。
[追記]また、新たにActivityを起動するため、Intent.FLAG_ACTIVITY_NEW_TASKフラグをintentにセットします。[追記]
アプリケーション削除完了の検出
アプリケーションがインストールされたことを検知する方法と同じ方法で、アプリケーションの削除も検知することが可能です。
アプリケーションが削除されるときにも、インストール時と同様BroadcastIntentが発生します。
「android.intent.action.PACKAGE_REMOVED」を先ほどと同じようにBroadcastReceiverとして定義するだけです。
<intent-filter> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package"/> </intent-filter>
他にも、以下のような検知が可能です。
[table “187” not found /]
アプリケーションのインストール、アンインストールと同時にアプリを起動したい、通知したいという方は、一度試してみてはどうでしょうか。