我想构建一个应用程序,可以跟踪用户在某些应用上花费多长时间(主要用于概念验证和在其他应用中实现。)我知道Lollipop实现了API UsageStatsManager,可以帮助您跟踪“应用程序在一个时间间隔(按天,周,月或年)的前景中的总时间长度。”
我还读过一个can poll the AcvtivtyManager continuously,但这会浪费电池寿命并占用CPU和RAM。
我不知道的是,有没有一种有效的方法来跟踪运行Android版本低于Lollipop的设备上的应用程序打开的时间。具体来说,像Aptrax和App Usage Tracker这样的应用程序以及其他许多应用程序如何使用非常少或“无电池消耗(即使在高频跟踪时)”。 是否有这些应用程序使用的另一种方法,在Lollipop前设备上获取应用程序使用数据,电池使用量很少,或者调查活动管理器的资源不是因为它们来源我认为引导我相信。
答案 0 :(得分:3)
我试图做同样但发现没有更好的方法,basicklly轮询活动经理,现在确保不浪费battary使用alarmManager和recieverto设置pollin的醒来时间,以便当手机睡着了它不会被你的民意调查所唤醒(假设用户在屏幕打开且手机处于活动状态时使用应用程序)并且每5秒左右轮询一次 这是基本的示例代码
Intent alarmIntent = new Intent(context, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, Calendar.getInstance().getTimeInMillis(), pendingIntent);
public class MyReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
// poll activity manager and any thing else you want here
// including figuring out the next time you want to run
// and scheduling another PendingIntent with the AlarmManager
}
}
使用AlarmManager.RTC确保接收器仅在手机唤醒时进行轮询。