您当前的位置: 首页 >  android
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Android5.0通过UsageStatsManager获取应用使用情况

沙漠一只雕得儿得儿 发布时间:2020-09-15 10:30:20 ,浏览量:0

目前需求统计应用的当天使用情况,在 5.0 以上有权限 android.permission.PACKAGE_USAGE_STATS,获取到该权限后可以通过 UsageStatsManager.queryUsageStats(int intervalType, long beginTime, long endTime) 方法查询到应用的使用情况。

首先需要在AndroidManifest.xml里声明权限

如果不声明权限,打不开界面。然后打开允许查看使用情况的应用界面,此功能需要在设置的里打开,android5.1以下没有此界面(Android5.0以下一定没有,大部分Android5.0系统也没有),需要在代码里打开,需要判断一下系统版本。

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            if (!hasPermission()) {
                startActivityForResult(
                        new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS),
                        MY_PERMISSIONS_REQUEST_PACKAGE_USAGE_STATS);
            }
        }

使用UsageStatsManager前必须手动开启“使用情况访问权限”,类似accessibilityService,需要用户手动开启。如果不打开的话,下面的UsageStatsManger的所有方法获取的包名等都为空。这块当时折腾了很久,务必开启。

下面即可获取界面顶端的应用界面:

        private void getTopApp(Context context) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);
                if (m != null) {
                    long now = System.currentTimeMillis();
                    //获取60秒之内的应用数据
                    List stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000, now);
                    Log.i(TAG, "Running app number in last 60 seconds : " + stats.size());

                    String topActivity = "";

                    //取得最近运行的一个app,即当前运行的app
                    if ((stats != null) && (!stats.isEmpty())) {
                        int j = 0;
                        for (int i = 0; i < stats.size(); i++) {
                            if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {
                                j = i;
                            }
                        }
                        topActivity = stats.get(j).getPackageName();
                    }
                    Log.i(TAG, "top running app is : " + topActivity);
                }
            }
        }

下面就是获取到的顶端的应用包名:

完整项目地址:

https://github.com/buder-cp/base_component_learn/blob/master/IQWork/appuseage2/src/main/java/com/example/appuseage2/MainActivity.java

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.1898s