62
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Android】getRunningTasksが使えなくなったLollipopでアプリ使用状況を取得する

Last updated at Posted at 2015-02-17

Lollipopになって、privacyについて強化するためかActivityManagerのgetRunningTasksやgetRecentTasksはdeprecatedとなりました。

非推奨なだけでなく挙動も変わってます。

現状の挙動は結果は返却されますが、 そのメソッドを呼んだアプリ自身もしくはランチャーアプリの情報しか帰ってこないようになっています。

今回はその代替手段について調べてみました。

UsageStatsManagerを使う

UsageStatsManagerのqueryEventsを使って得られるUsageEventsから、各アプリがforegroundもしくはbackgroundになったときのtimestamp、classNameが取得できます。

    UsageStatsManager stats = (UsageStatsManager) getSystemService("usagestats");
    UsageEvents usageEvents = stats.queryEvents(start, end);
    while (usageEvents.hasNextEvent()) {
        UsageEvents.Event event = new android.app.usage.UsageEvents.Event();
        usageEvents.getNextEvent(event);
        long timestamp = event.getTimeStamp();
        String packagName = event.getPackageName();
        String className = event.getClassName();
        int type = event.getEventType();
        :
    }
AndroidManifest.xml
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>

ただ、このままするといくらやっても、 usageEvents.hasNextEvent() は常にfalseを返してきます。

これを解消するには 設定->セキュリティー->使用履歴にアクセスできるアプリ にて自分のアプリをONにしてもらう必要があります

これをONにすることでUsagEventsを取得する事ができるようになります。

ちなみにアプリからこの画面にぶっ飛ばすには下記コードで大丈夫です

startActivity(new Intent("android.settings.USAGE_ACCESS_SETTINGS"));

現状調査した範囲では、自分のアプリが取得可能な状態になっているかを判断するには一度「UsageStatsManagerで取得してみる」というしかないようです。
他に方法を見つけたら追記します。

自分のアプリが取得可能な状態になっているかどうかは、下記コードで確認可能のようです!

public boolean isUsageStatsAllowed() {
    AppOpsManager appOps = (AppOpsManager) getSystemService(Context.APP_OPS_SERVICE);
    int uid = android.os.Process.myUid();
    int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, uid, getPackageName());
    return  mode == AppOpsManager.MODE_ALLOWED;
}
62
59
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
62
59

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?