Android Studio Java重写getLastTimeUsed中的代码太getTotalTimeInForeground

Android Studio Java重写getLastTimeUsed中的代码太getTotalTimeInForeground,java,android,Java,Android,我在GitHub上发现了一些代码,它可以注册和显示android设备的usageStats,但是usageStats输出为getLastTimeUsed,我希望它显示为getTotalTimeInForeground,我尝试在任何地方更改代码,但输出的时间为1/1/70,不是花在应用程序上的实时时间,请帮助我发现解决方案 这是不同类别的代码: public class UsageStatVH extends RecyclerView.ViewHolder { private Image

我在GitHub上发现了一些代码,它可以注册和显示android设备的usageStats,但是usageStats输出为getLastTimeUsed,我希望它显示为getTotalTimeInForeground,我尝试在任何地方更改代码,但输出的时间为1/1/70,不是花在应用程序上的实时时间,请帮助我发现解决方案

这是不同类别的代码:

public class UsageStatVH extends RecyclerView.ViewHolder {

    private ImageView appIcon;
    private TextView appName;
    private TextView lastTimeUsed;

    public UsageStatVH(View itemView) {
        super(itemView);

        appIcon = (ImageView) itemView.findViewById(R.id.icon);
        appName = (TextView) itemView.findViewById(R.id.title);
        lastTimeUsed = (TextView) itemView.findViewById(R.id.last_used);
    }

    public void bindTo(UsageStatsWrapper usageStatsWrapper) {
        appIcon.setImageDrawable(usageStatsWrapper.getAppIcon());
        appName.setText(usageStatsWrapper.getAppName());
        if (usageStatsWrapper.getUsageStats() == null) {
            lastTimeUsed.setText(R.string.last_time_used_never);
        } else if (usageStatsWrapper.getUsageStats().getLastTimeUsed() == 0 L) {
            lastTimeUsed.setText(R.string.last_time_used_never);
        } else {
            lastTimeUsed.setText(App.getApp().getString(R.string.last_time_used,
                DateUtils.format(usageStatsWrapper)));
        }
    }
}

public class DateUtils {

    public static String format(UsageStatsWrapper usageStatsWrapper) {

        DateFormat format = SimpleDateFormat.getDateInstance(DateFormat.SHORT);
        return format.format(usageStatsWrapper.getUsageStats().getLastTimeUsed());
    }
}

public final class UsageStatsWrapper implements Comparable < UsageStatsWrapper > {

    private final UsageStats usageStats;
    private final Drawable appIcon;
    private final String appName;

    public UsageStatsWrapper(UsageStats usageStats, Drawable appIcon, String appName) {
        this.usageStats = usageStats;
        this.appIcon = appIcon;
        this.appName = appName;
    }

    public UsageStats getUsageStats() {
        return usageStats;
    }

    public Drawable getAppIcon() {
        return appIcon;
    }

    public String getAppName() {
        return appName;
    }

    @Override
    public int compareTo(@NonNull UsageStatsWrapper usageStatsWrapper) {
        if (usageStats == null && usageStatsWrapper.getUsageStats() != null) {
            return 1;
        } else if (usageStatsWrapper.getUsageStats() == null && usageStats != null) {
            return -1;
        } else if (usageStatsWrapper.getUsageStats() == null && usageStats == null) {
            return 0;
        } else {
            return Long.compare(usageStatsWrapper.getUsageStats().getLastTimeUsed(),
                usageStats.getLastTimeUsed());
        }
    }
}

public class UsagePresenter implements UsageContract.Presenter {

    private static final int flags = PackageManager.GET_META_DATA |
        PackageManager.GET_SHARED_LIBRARY_FILES |
        PackageManager.GET_UNINSTALLED_PACKAGES;

    private UsageStatsManager usageStatsManager;
    private PackageManager packageManager;
    private UsageContract.View view;
    private final Context context;

    public UsagePresenter(Context context, UsageContract.View view) {
        usageStatsManager = (UsageStatsManager) context.getSystemService("usagestats");
        packageManager = context.getPackageManager();
        this.view = view;
        this.context = context;
    }

    private long getStartTime() {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.YEAR, -1);
        return calendar.getTimeInMillis();
    }

    @Override
    public void retrieveUsageStats() {
        if (!checkForPermission(context)) {
            view.onUserHasNoPermission();
            return;
        }

        List < String > installedApps = getInstalledAppList();
        Map < String, UsageStats > usageStats = usageStatsManager.queryAndAggregateUsageStats(getStartTime(), System.currentTimeMillis());
        List < UsageStats > stats = new ArrayList < > ();
        stats.addAll(usageStats.values());

        List < UsageStatsWrapper > finalList = buildUsageStatsWrapper(installedApps, stats);
        view.onUsageStatsRetrieved(finalList);
    }

    private boolean checkForPermission(Context context) {
        AppOpsManager appOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
        int mode = appOps.checkOpNoThrow(OPSTR_GET_USAGE_STATS, myUid(), context.getPackageName());
        return mode == MODE_ALLOWED;
    }

    private List < String > getInstalledAppList() {
        List < ApplicationInfo > infos = packageManager.getInstalledApplications(flags);
        List < String > installedApps = new ArrayList < > ();
        for (ApplicationInfo info: infos) {
            installedApps.add(info.packageName);
        }
        return installedApps;
    }

    private List < UsageStatsWrapper > buildUsageStatsWrapper(List < String > packageNames, List < UsageStats > usageStatses) {
        List < UsageStatsWrapper > list = new ArrayList < > ();
        for (String name: packageNames) {
            boolean added = false;
            for (UsageStats stat: usageStatses) {
                if (name.equals(stat.getPackageName())) {
                    added = true;
                    list.add(fromUsageStat(stat));
                }
            }
            if (!added) {
                list.add(fromUsageStat(name));
            }
        }
        Collections.sort(list);
        return list;
    }

    private UsageStatsWrapper fromUsageStat(String packageName) throws IllegalArgumentException {
        try {
            ApplicationInfo ai = packageManager.getApplicationInfo(packageName, 0);
            return new UsageStatsWrapper(null, packageManager.getApplicationIcon(ai), packageManager.getApplicationLabel(ai).toString());

        } catch (PackageManager.NameNotFoundException e) {
            throw new IllegalArgumentException(e);
        }
    }

    private UsageStatsWrapper fromUsageStat(UsageStats usageStats) throws IllegalArgumentException {
        try {
            ApplicationInfo ai = packageManager.getApplicationInfo(usageStats.getPackageName(), 0);
            return new UsageStatsWrapper(usageStats, packageManager.getApplicationIcon(ai), packageManager.getApplicationLabel(ai).toString());

        } catch (PackageManager.NameNotFoundException e) {
            throw new IllegalArgumentException(e);
        }
    }
}
公共类USAGESTAVH扩展了RecyclerView.ViewHolder{
私有ImageView应用图标;
私有文本视图appName;
私有文本视图lastTimeUsed;
公共USAGESTAVH(查看项目视图){
超级(项目视图);
appIcon=(ImageView)itemView.findViewById(R.id.icon);
appName=(TextView)itemView.findViewById(R.id.title);
lastTimeUsed=(TextView)itemView.findViewById(R.id.last_used);
}
public void bindTo(UsageStatsWrapper UsageStatsWrapper){
setImageDrawable(usageStatsWrapper.getAppIcon());
appName.setText(usagestastswapper.getAppName());
if(usageStatsWrapper.getUsageStats()==null){
lastTimeUsed.setText(R.string.last\u time\u used\u never);
}else if(usageStatsWrapper.getUsageStats().getLastTimeUsed()==0 L){
lastTimeUsed.setText(R.string.last\u time\u used\u never);
}否则{
lastTimeUsed.setText(App.getApp().getString)(R.string.last\u time\u used,
格式(usagestastswapper));
}
}
}
公共类DateUtils{
公共静态字符串格式(UsageStatsWrapper UsageStatsWrapper){
DateFormat=SimpleDataFormat.getDateInstance(DateFormat.SHORT);
返回format.format(usageStatsWrapper.getUsageStats().getLastTimeUsed());
}
}
公共最终类UsageStatsWrapper实现了Compariable{
私人最终使用者使用者使用者;
私有最终可绘制应用程序图标;
私有最终字符串appName;
公共UsageStatsWrapper(UsageStats UsageStats、可绘制应用图标、字符串应用名称){
this.usageStats=usageStats;
this.appIcon=appIcon;
this.appName=appName;
}
公共服务部门{
返回usageStats;
}
公共可绘制getAppIcon(){
返回appIcon;
}
公共字符串getAppName(){
返回appName;
}
@凌驾
public int compareTo(@NonNull UsageStatsWrapper UsageStatsWrapper){
if(usageStats==null&&usagestastswapper.getUsageStats()!=null){
返回1;
}else if(usagestastswapper.getUsageStats()==null&&usageStats!=null){
返回-1;
}else if(usagestastswapper.getUsageStats()==null&&usageStats==null){
返回0;
}否则{
返回Long.compare(usageStatsWrapper.getUsageStats().getLastTimeUsed(),
getLastTimeUsed());
}
}
}
公共类UsagePresenter实现UsageContract.Presenter{
私有静态final int flags=PackageManager.GET_META_数据|
PackageManager.GET_共享_库_文件|
PackageManager.GET_卸载_包;
私人UsageStatsManager UsageStatsManager;
专用软件包管理器软件包管理器;
私人使用合同;
私人最终语境;
公共UsagePresenter(上下文,UsageContract.View){
usageStatsManager=(usageStatsManager)context.getSystemService(“usagestats”);
packageManager=context.getPackageManager();
this.view=视图;
this.context=上下文;
}
私有长getStartTime(){
日历=Calendar.getInstance();
calendar.add(calendar.YEAR,-1);
return calendar.getTimeInMillis();
}
@凌驾
公共无效检索UsageStats(){
如果(!checkForPermission(上下文)){
view.onUserHasNoPermission();
返回;
}
ListinstalledApps=getinstalledApplication();
MapUsageStats=usagestastsmanager.queryandagregateusagestats(getStartTime(),System.currentTimeMillis());
列表stats=newarraylist<>();
addAll(usageStats.values());
ListfinalList=buildusagestastswapper(installedApps,stats);
视图。检索到的OnUsageStatsRetrieve(finalList);
}
专用布尔值checkForPermission(上下文){
AppOpsManager appOps=(AppOpsManager)context.getSystemService(context.APP_OPS_SERVICE);
int mode=appOps.checkOpNoThrow(OPSTR_GET_USAGE_STATS,myUid(),context.getPackageName());
返回模式==允许的模式;
}
私有列表getInstalledApplication(){
列出infos=packageManager.GetInstalledApplication(标志);
ListinstalledApps=new ArrayList<>();
用于(应用程序信息:infos){
installedApps.add(info.packageName);
}
返回已安装的应用程序;
}
私有列表buildUsageStatsWrapper(列表packagename,列表usageStatses){
ListList=newarraylist<>();
for(字符串名称:packageNames){
布尔加法=假;
for(UsageStats统计:usageStatses){
if(name.equals(stat.getPackageName())){
添加=真;
添加(来自USAGESTAT(stat));
}
}
如果(!已添加){
添加(来自USAGESTAT(名称));
}
}
集合。排序(列表);
退货清单;
}
来自USAGESTAT(字符串packageName)的私有UsageStatsWrapper抛出IllegalArgumentException{
试一试{
ApplicationInfo ai=packageManager.getApplicationInfo(packageName,0);
返回新美国