首页 > android 如何检测手机上每个app的使用情况?

android 如何检测手机上每个app的使用情况?

我想要开发一个能检测用户什么时间使用了什么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
【热门文章】
【热门文章】