UsageStatsManager 获取应用使用情况

获取应用使用情况涉及的类是UsageStatsManager ,用于获取包含特定时间范围的应用包的使用情况统计信息;在Android api21(即Android5.0引入);系统API稳定性好,Android5.0及以后版本都支持,不存在版本兼容问题。

一.判断应用是否具有此权限的方式如下:

    public boolean isGrantedUsagePremission(Context context) {
        boolean granted = false;
        AppOpsManager appOps = (AppOpsManager) context
                .getSystemService(Context.APP_OPS_SERVICE);
        int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS,
                android.os.Process.myUid(), context.getPackageName());

        if (mode == AppOpsManager.MODE_DEFAULT) {
            granted = (context.checkCallingOrSelfPermission(
                    android.Manifest.permission.PACKAGE_USAGE_STATS)
                    == PackageManager.PERMISSION_GRANTED);
        } else {
            granted = (mode == AppOpsManager.MODE_ALLOWED);
        }
        return granted;
    }

以上方法已验证此方法有效

备注 : 常规判断权限方式,PackageManager和Context的权限check 都无法获取到准确的UsageStatsManager 

            详情如下:不能获取准确UsageStatsManager 权限是否被赋予

String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getContext().checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;  
String permission = "android.permission.PACKAGE_USAGE_STATS";
boolean granted=getPackageManager().checkPermission(permission,getPackageName())== PackageManager.PERMISSION_GRANTED;  

二、获取到UsageStatsManager权限能够获取到的信息如下:

系统提供Api获取能力

1.可以获取指定的应用程序当前是否为非活动状态;

  方法API:isAppInactive(String packageName)

2.可以获取指定时间范围内的应用统计信息(可以按年、月、日指定获取)

  涉及方法:queryUsageStats(int intervalType, long beginTime, long endTime)

   统计信息包括:应用的前台使用时长,应用首次启动时间,应用最近一次使用时间等;

3.获取设备在给定时间范围内所处的硬件配置,按指定的时间间隔进行聚合。

   涉及方法:queryConfigurations(int intervalType, long beginTime, long endTime)

   配置信息包括:orientation、uimode、mcc、mnc、navigationlocalekeyboard

4.获取给定时间范围的聚合事件统计信息,按指定的时间间隔汇总(粒度为Activity)

  涉及方法:queryEventStats(int intervalType, long beginTime, long endTime)

  事件包括:锁屏事件、切换前台事件、切换到后台事件、屏幕交互状态事件、屏幕非交互状态事件等以及各事件对应的应用和时间戳

延伸获取信息:

1.可以获取到当前前台应用以及TopActivity

2.统计设备上应用的使用时长

3.统计设备上应用的启动次数

4.循环查询近几秒统计情况,可以监控其他App的启动、前后台切换等时,并做相应操作;

 参考文献:

https://developer.android.com/reference/android/app/usage/UsageStatsManager

 https://www.jianshu.com/p/fa736d021d1f

https://www.jianshu.com/p/749eab85d95b

https://www.jianshu.com/p/e11cdfaf15dc

https://www.cnblogs.com/KevinSong/p/7978728.html

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值