做了一个应用运行时间接口,首先将自己的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;
}
这个方法获取的是系统所有应用的运行信息,如果需要单个应用的,可以通过包名进行过滤,