Androidにおいて、現在表示されているアプリを取得したいと思い、Processに関して調べました。
結論から言うと、getRunningTasks(int n)を使います。
調べてみたところ、プロセス関連では、
ActivityManagerからgetRunningTasks(int)を使うものと
getRunningAppProcesses()を使うものがあるということです。
getRunningTasks(int)は指定数を最大数として、runningのタスクを取得することができます。
詳細説明は こちら のブログより参考にさせていただきました。
これでバックグラウンドにて動いているものも含め、Activityが取得できます。
(SH-12CとGalaxyS2で試したところ、ホーム画面も検出する模様。)
これで先頭の物が現在表示されているアプリである。
ちなみにgetRunningAppProcesses()は現在動いているProcessの一覧を取得しているものと思われます。
取得できる項目は リファレンス 参照。
気になる項目としては、「pid」「processName」「importance」があります。
pid:プロセスの固有ID
processName:プロセス名
importance:状態
特にimportanceはそのプロセスがどのような状態かを表し、なかなか有用です。
たとえばimportanceが
100:動作中のアプリケーション
300:動作中のサービス
400:バックグラウンドにいるアプリケーション
みたいな感じで、状態を区別できます。
あとは英語ができないのでよくわかりません。
サービスも含めて動作中のProcess等詳細に調べたい場合はこちらのが有用でしょう。
最後に、 サービスで動作し、接近センサーをトリガーとして、プロセスの出力を確認する
アプリを創りました。どんなものが出力されるか観察できます。
観測データはSDカード内部にCSVで保存されます。
EXCELで適当にさばいてください。
ソースコードは こちら より。
ソースのみlayoutファイルは含みません。
サービスの起動停止を行うonClickのついたボタンを適当に2つおいてください。