学无先后,达者为师

网站首页 编程语言 正文

Android获取Apk使用信息

作者:菜鸟xiaowang 更新时间: 2022-10-11 编程语言

1.配置权限

<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>

2.代码逻辑

 public void getUseTime(){
        UsageStatsManager usm = (UsageStatsManager)getSystemService(Context.USAGE_STATS_SERVICE);
        Calendar calendar = Calendar.getInstance();
        long endTime = calendar.getTimeInMillis();
        calendar.add(Calendar.DAY_OF_WEEK, -2);//最近两周启动过所用app的List
        long startTime = calendar.getTimeInMillis();
/**
 *
 *   queryUsageStats第一个参数是根据后面的参数获取合适数据的来源,有按天,按星期,按月,按年等。
 *   UsageStatsManager.INTERVAL_BEST
 *   UsageStatsManager.INTERVAL_DAILY 按天
 *   UsageStatsManager.INTERVAL_WEEKLY 按星期
 *   UsageStatsManager.INTERVAL_MONTHLY 按月
 *   UsageStatsManager.INTERVAL_YEARLY 按年
 */

        List<UsageStats> list = usm.queryUsageStats(UsageStatsManager.INTERVAL_YEARLY,startTime,endTime);
//需要注意的是5.1以上,如果不打开此设置,queryUsageStats获取到的是size为0的list;
        if(list.size()==0)
        {
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) {
                try {
                    startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS));
                } catch (Exception e) {
                    Toast.makeText(this,"无法开启允许查看使用情况的应用界面",Toast.LENGTH_LONG).show();
                    e.printStackTrace();
                }
            }
        }else{
            for(UsageStats usageStats :list){
                Log.e("TAG",usageStats.getPackageName());//获取包名
                Log.e("TAG",usageStats.getFirstTimeStamp()+"");//获取第一次运行的时间
                Log.e("TAG",usageStats.getLastTimeStamp()+"");//获取最后一次运行的时间
                Log.e("TAG",usageStats.getTotalTimeInForeground()/1000+"");//获取总共运行的时间 单位毫秒
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String format = sdf.format(usageStats.getFirstTimeStamp());// 格式化时间
                Log.e("TAG",format);

                SimpleDateFormat time = new SimpleDateFormat("HH:mm:ss");
                String timeLong = time.format(usageStats.getTotalTimeInForeground()- TimeZone.getDefault().getRawOffset());// 格式化使用时长
                Log.e("TAG",timeLong);
                try{
                    Field field = usageStats.getClass().getDeclaredField("mLaunchCount");
                    Log.e("TAG",field.get(usageStats).toString());//获取应用启动次数
                }catch (Exception e)
                {
                    e.printStackTrace();;
                }
}

原文链接:https://blog.csdn.net/xiaowang_lj/article/details/127247863

栏目分类
最近更新