Android

アプリが新規にインストールされたら、IntentServiceを呼んでログを吐く

More than 3 years have passed since last update.

前回ServiceをAIDLを使って弄ぶ練習、前々回(端末に新規アプリがインストールされたらログを吐く)に引き続き、 IntentService の利用方法とか、ほとんど覚えていないので、メモを残す。


概要

前回、Serviceを使ってみたけど常駐する必要はなかったので、IntentServiceを実装すれば充分かなという自己完結。

こいつはキューがなくなったら自分でdestroyするみたいで、明示的にServiceをstopする必要もなく、楽ちんだし便利ぽい。work queue processorパターンとかいうみたい。

アプリが新規にインストールを検知したら、IntentServiceを起動してオシマイって流れが、シンプルかなと思う。

ここでは単純にログを吐いているだけだが、何か裏側で重い処理をしようってんなら、この作りでいいんじゃまいか。


実装

GitHubにサンプルソースを置きました

だいたい下記ファイルを眺めればわかるかと。

AndroidStudioでIntentServiceを生成したら、

勝手にヘルパーメソッドを作成してくれて、サンプルを作る分には楽だった。

レシーバはアプリと同じプロセスにし、サービスは別プロセスにした。


AndroidManifest.xml

<service

android:name=".services.ShoutIntentService"
android:enabled="true"
android:exported="false"
android:process=":shout" />

<receiver
android:name=".receivers.AppInstalledObserveReceiver"
android:enabled="true"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.PACKAGE_ADDED" />

<data android:scheme="package" />
</intent-filter>
</receiver>