Android 获取应用运行时长

 做了一个应用运行时间接口,首先将自己的service定义完成,自定义service流程在前面的文章里,方法实现是在

frameworks/base/services/core/java/com/android/server/customized/CustomizedService.java里,代码如下:

import android.app.usage.UsageStats;
import android.app.usage.UsageStatsManager;
import java.util.Map;
import java.lang.System;
import java.util.Calendar;
import java.text.DateFormat;
import android.text.format.DateUtils;

    
    private UsageStatsManager mUsm;
    private static final long USAGE_STATS_PERIOD = 1000 * 60 * 60 * 24 * 14;
    private List<UsageStats> mStats;


     mUsm = (UsageStatsManager) mContext.getSystemService(Context.USAGE_STATS_SERVICE); //初始化UsageStatsManager 

 /*
  *  获取所有应用运行时间
  */
    public String getAppTimeUsageInfo(){
        long jh = Binder.clearCallingIdentity();
        JSONArray json=new JSONArray();
        mStats = getUsageList();
        if(mStats.size()!=0 && mStats!=null){
            for(int i=0;i<mStats.size();i++){
                final android.app.usage.UsageStats pkgStats = mStats.get(i);
                try{
                    JSONObject jsonObj=new JSONObject();
                    jsonObj.put("package_name",pkgStats.getPackageName());
                    jsonObj.put("time_begin",pkgStats.getFirstTimeStamp());
                    jsonObj.put("time_end",pkgStats.getLastTimeStamp());
                    jsonObj.put("time_used",pkgStats.getLastTimeUsed());
                    jsonObj.put("time_total",pkgStats.getTotalTimeInForeground());
                    json.put(jsonObj);
                }catch(Exception e){}
            }
        }
        Binder.restoreCallingIdentity(jh);
        return json+"";
    }

   /*
    * 通过service获取所有应用使用信息集合
    */
    private List<UsageStats> getUsageList() {
        long jh = Binder.clearCallingIdentity();
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.DAY_OF_YEAR, -5);
        final List<UsageStats> stats =mUsm.queryUsageStats(UsageStatsManager.INTERVAL_BEST,
        calendar.getTimeInMillis(), System.currentTimeMillis());
        Binder.restoreCallingIdentity(jh);
        return stats;
    }

这个方法获取的是系统所有应用的运行信息,如果需要单个应用的,可以通过包名进行过滤,

猜你喜欢

转载自blog.csdn.net/lancelots/article/details/82387773