7

我是安卓新手。在我的应用程序中,我想跟踪使用其他应用程序(安装在设备上)的时间(在前台)。

可能吗?如果是,那怎么办?

提前致谢!

4

2 回答 2

4

首先,这里需要知道的是在前台运行的应用程序是什么:

您可以通过调用检测当前的前台/后台应用程序ActivityManager.getRunningAppProcesses()

所以,它看起来像 ::

  class findForeGroundProcesses extends AsyncTask<Context, Void, Boolean> {

      @Override
      protected Boolean doInBackground(Context... params) {
        final Context context = params[0].getApplicationContext();
        return isAppOnForeground(context);
      }

      private boolean isAppOnForeground(Context context) {
        ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
        if (appProcesses == null) {
          return false;
        }
        final String packageName = context.getPackageName();
        for (RunningAppProcessInfo appProcess : appProcesses) {
          if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
            return true;
          }
        }
        return false;
      }
    }

    // Now  you call this like:
    boolean foreground = new findForeGroundProcesses().execute(context).get();

您也可以检查一下:确定前台/后台进程

要测量进程运行其应有的时间所花费的时间,您可以使用以下方法:

getElapsedCpuTime()  

参考这篇文章

于 2013-05-06T12:06:22.683 回答
3

我认为做到这一点的唯一方法是使用后台服务并不断搜索哪个应用程序在前台(可以使用 ActivityManager)。

但是这种解决方案的电池成本很高

于 2013-05-06T11:36:07.873 回答