アプリの起動回数や起動時間の取得について

3,040 views
Skip to first unread message

NECH

unread,
Aug 6, 2011, 10:41:14 AM8/6/11
to 日本Androidの会
NECHといいます.
こちらのサイトは何度か利用させていただいてます.

今回は「アプリの起動回数や起動時間の取得について」質問させていただきます.
イメージとしてタスクキラー系アプリのように、端末内の他のアプリが何回起動し、どのくらい起動していたのかという情報を取得したいと思っています.

今までは、端末のバックグランドでServiceを起動させ、各アプリケーションのプロセスがForegroundになった時にそういった情報を取得し
たのですが、こういった方法では、常にサービスを起動しなければならず、端末に対する負荷が大きくなってしまいます.(電池消耗が速くなる等)

そこで、他の取得方法がないか模索しています.
マーケットに出ていいる他のアプリを試したところ、たとえばAppmomというアプリでは、端末の負荷(CPU利用率等)が全然かかっていないにも関わ
らず、端末内の他のアプリの起動回数を取得しています.

どなたか、端末内の他のアプリが何回起動し、どのくらい起動していたのかという情報を簡単かつ端末の負荷なしに取得する方法をご存知でしたら、教えて頂
ければ幸いです.
よろしくお願いします.

大垣憲俊

unread,
Aug 6, 2011, 1:20:47 PM8/6/11
to 日本Androidの会
大垣です。

エミュレータの中に「Spare Parts」というアイコンがあり、起動すると「Usage statistics」というメニューがあります。
そこに、アプリケーションの起動回数と使用時間が出てきます。

それが「UsageStats」というアクティビティです。ソースコードは次の場所です。
<froyo>/packages/apps/Settings/src/com/android/settings/
UsageStats.java

com.android.internal やら @hide 付きクラスなどを呼び出しているので、
関係するファイルをごっそり持ってくれば、自アプリでも動くのではないかとやってみましたが、
残念ながらできませんでした。

UsageStatsでは、以下のように、"usagestats"というサービスを呼び出して、

mUsageStatsService =
IUsageStats.Stub.asInterface(ServiceManager.getService("usagestats"));

取得したデータが com.android.internal.os.PkgUsageStats (@hideの隠しクラス) なので、
それをListViewで見せるだけ。

PkgUsageStats pkgStats = mUsageStats.get(position);
if (pkgStats != null) {
CharSequence label =
mAppLabelMap.get(pkgStats.packageName);
holder.pkgName.setText(label);

holder.launchCount.setText(String.valueOf(pkgStats.launchCount));

holder.usageTime.setText(String.valueOf(pkgStats.usageTime)+" ms");
}

私が引っかかったのは、com.android.internal.os.BinderInternal で、
java.lang.UnsatisfiedLinkError: getContextObject
になりました。
jniを使って、ライブラリとリンクすればいいのかもしれませんが、
あやふやなので、まずはここらで、お知らせまで。
Reply all
Reply to author
Forward
0 new messages