Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
58
Help us understand the problem. What is going on with this article?
@kgmyshin

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

More than 5 years have passed since last update.

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;
}
58
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
kgmyshin
ドーナツ食べたいっ! ドーナツドーナツ、どーんといきたいよぉ!
dmmcom
総合エンタテイメントサイト「DMM.com」を運営。会員数は2,900万人を突破。動画配信、FX、英会話、ゲーム、太陽光発電、3Dプリンタなど40以上のサービスを展開。沖縄での水族館事業参入、ベルギーでのサッカークラブ経営など、様々な事業を手掛ける。また2018年より若手起業家の支援を強化、「DMM VENTURES」による出資や、M&Aなどを積極的に展開している。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
58
Help us understand the problem. What is going on with this article?