如何找到在特定应用上花费的时间?

时间:2017-04-29 05:34:17

标签: android

  

如何在Android中以编程方式使用 packagename 获取在特定应用上花费的时间?

在谷歌之后我发现了这个stack overflow questionthis,但我没有得到任何正确的解决方案。

有没有人知道我如何获得所有Android版本的时间?

我也试过this,但我不想做后台服务。 当用户返回我的应用时,我只想知道用户是否在给定时间内使用该应用。

2 个答案:

答案 0 :(得分:1)

我在下面提到的方法是一种非常有效的方法,可以让用户在android中获取应用的总花费时间。首先,您需要一个自定义的 ActivityLifecycleCallbacks ,它负责触发应用程序开始启动和停止的时间。您只需将 ActivityLifecycleCallbacks 注册到您的应用程序实例。这还将考虑是否有任何用户暂停了该应用程序,因此您无需考虑它。自定义的 ActivityLifecycleCallbacks 类为-

public class ApplicationTimeSpentTracker implements Application.ActivityLifecycleCallbacks {
    private int activityReferences = 0;
    private boolean isActivityChangingConfigurations = false;
    private long startingTime;
    private long stopTime;

    @Override
    public void onActivityCreated(Activity activity, Bundle bundle) {
    }

    @Override
    public void onActivityStarted(Activity activity) {
        if (++activityReferences == 1 && !isActivityChangingConfigurations) {

            // App enters foreground
            startingTime=System.currentTimeMillis()/1000; //This is the starting time when the app began to start
        }
    }

    @Override
    public void onActivityResumed(Activity activity) {
    }

    @Override
    public void onActivityPaused(Activity activity) {
    }

    @Override
    public void onActivityStopped(Activity activity) {
        isActivityChangingConfigurations = activity.isChangingConfigurations();
        if (--activityReferences == 0 && !isActivityChangingConfigurations) {

            // App enters background
            stopTime = System.currentTimeMillis() / 1000;//This is the ending time when the app is stopped 

            long totalSpentTime= stopTime-startTime; //This is the total spent time of the app in foreground
        }
    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle bundle) {
    }

    @Override
    public void onActivityDestroyed(Activity activity) {
    }
}

最后,您需要像这样在 MainActivity 中将回调注册到您的应用程序实例中-

    activity.getApplication().registerActivityLifecycleCallbacks(new ApplicationTimeSpentTracker());

如果您需要详细信息,请在这里post

答案 1 :(得分:0)

为实现这一目标,你必须做两件事。

  

<强> 1。用户离开您的活动时启动计时器并转到另一个应用程序。

     

<强> 2。使用以下代码致电后台服务

private void check()     
{
    ActivityManager actvityManager = (ActivityManager)
            this.getSystemService( ACTIVITY_SERVICE );
    List<ActivityManager.RunningAppProcessInfo> procInfos = actvityManager.getRunningAppProcesses();
    for(int i = 0; i < procInfos.size(); i++)
    {
        if(procInfos.get(i).processName.equals("specific pacakgename here")) {

            //check time here

        }
    }
}