大垣です。
エミュレータの中に「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を使って、ライブラリとリンクすればいいのかもしれませんが、
あやふやなので、まずはここらで、お知らせまで。