我是android新手。在我的应用程序中,我想跟踪其他应用程序(安装在设备上)的使用时间(在前台)。
有可能吗?如果是,那么如何?
提前致谢!
答案 0 :(得分: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();
您也可以查看一下:Determining foreground/background processes。
要衡量流程运行到期时间所需的时间,您可以使用以下方法:
getElapsedCpuTime()
请参阅此article。
答案 1 :(得分:2)
我认为通过使用后台服务并不断搜索哪个应用程序位于前台(可以通过使用ActivityManager)来实现此目的的唯一方法。
但这种解决方案的电池成本很高