我想要开发一个能检测用户什么时间使用了什么app,使用时间有多长的功能,目前使用AlarmManager和检测activity栈顶程序的方法,但效率不高,请问有没有好的实现发案?
谢谢。
如果监测你自己写的app,可以在你的app中加入第三方包统计使用人数,经常浏览界面等,国内一般使用友盟,talkingdata,百度移动统计…国外一般使用Flurry,Localytics,Google Analytics for Mobile…如果检测别的app,这个真心没办法检测他们的具体使用情况,可以参考第三方的分析~~
你这个不好做吧
自己的应用的话安利一下友盟统计,比你自己实现要来的简单容易,数据分析也会更专业。监测其它应用的话就算了。
程序启动的时候,会在Logcat中打印出一些日志信息,其中就有类似下面的日志,表明是启动了哪个程序
01-21 15:09:56.957: I/ActivityManager(240): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.estrongs.android.pop/.view.FileExplorerActivity u=0} from pid 2176
这些日志都可以通过以下代码读取到,并且提供了解析包名的相应方法:
try {
int tagCode = EventLog.getTagCode("am_proc_start");
Collection<Event> output = new ArrayList<EventLog.Event>();
EventLog.readEvents(new int[] { tagCode }, output);
for (Event event : output) {
// PID, UID, Process Name, Type, Component
Object[] objects = (Object[]) event.getData();
ComponentName componentName = ComponentName
.unflattenFromString(objects[4].toString());
String packageName = componentName.getPackageName();
Log.d(TAG, "packageName=" + packageName);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
如果不使用三方的SDK的话,可以自己在启动一个Service的进程,然后进行扫描,隔几秒扫描一次,然后使用时长进行累加,具体的设置方法你可以自己想一下。
可以考虑定时调用ps命令获取系统进程列表然后自行分析,需要更加详细的进程信息可以自行到/proc/PID里去读文件分析,说明可以看Linux的man proc,或者看网页版也行:
http://man7.org/linux/man-pages/man5/pro...
比如下面是我用PHPDroid(PHP+WebView)开发的一个Android App的运行情况:ps|head -n1 && ps|grep u0_a228
Android上一个应用对应一个用户,所以可以通过用户来划分不同应用.
其中的S表示进程处于睡眠状态,Linux上进程主要有下面几种状态:
R (task_running) : 运行状态
S (task_interruptible): 可中断的睡眠状态
D (task_uninterruptible): 不可中断的睡眠状态
T (task_stopped or task_traced): 暂停状态或跟踪状态
Z (task_dead - exit_zombie): 退出状态,进程成为僵尸进程
X (task_dead - exit_dead): 退出状态,进程即将被销毁
比如PHP进程通过shell(sh)在调用ps和busybox时会看到下面的进程状态:
USER PID PPID VSIZE RSS WCHAN PC NAME
u0_a228 18922 290 964616 121072 sys_epoll_ 00000000 S net.php.phpdroid
u0_a228 5113 1 16632 4040 pipe_wait 00000000 S /data/data/net.php.phpdroid/php/bin/php
u0_a228 29176 5113 2732 1188 sys_rt_sig 00000000 S sh
u0_a228 29195 29176 2556 1012 00000000 R ps
u0_a228 29196 29176 1256 4 pipe_wait 00000000 S ./busybox