5

如何获取所有应用程序的启动次数?我有已安装应用程序的完整列表,并且在安装应用程序时有广播,但我需要任何应用程序的启动计数。我看到这个应用程序。你有 cpu 时间、前台时间和启动计数......他们是怎么做到的?

4

3 回答 3

3

最后我做到了!我创建了一个 AlarmManager,它每分钟检查一次正在运行的应用程序,如果一个应用程序正在运行(后台或活动),我会检查我最后一次看到它的时间。如果这个时间大于一分钟,我会增加计数。现在我正在尝试将应用程序发送到外部服务器的数据数量,我有这些数据,但是你知道这些数据是来自我安装了我的应用程序还是来自我启动智能手机时?

 Long txByte = TrafficStats.getUidTxBytes(listApp.getAppsRunning().get(i).getPid());

此代码用于获取计数时间

for(int i=0; i< listApp.getAppsRunning().size(); i++)
    {
        String pName = listApp.getAppsRunning().get(i).getPackageName();
        String Ldate = "0";
        int Nrun = 0;
        Long Ntime = null, Ndata = null ;
        Cursor c=db.fetchInstalled(pName);
        if(c.moveToFirst())
        {
            Nrun =  c.getInt(2);
            Ldate = c.getString(3);
            Ntime = c.getLong(4);
            Ndata = c.getLong(5);


            Log.d("db", "last time: " + Nrun+ " time: " + Ldate);
        }

        if(Ldate.equalsIgnoreCase("0"))
        {
            Nrun++;
            db.updateLaunchAndTime(Nrun, lastUpdated, pName, Ntime, Ndata);
        }
        else
        {
            SimpleDateFormat dateFormat = new SimpleDateFormat("MMMM dd, yyyy h:mmaa"); 
            Date lastDate = null;
            Date currentDate = null;
            try {
                lastDate = dateFormat.parse(Ldate);
                currentDate = dateFormat.parse(lastUpdated);
            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //int pid = android.os.Process.getUidForName(listApp.getAppsRunning().get(i).getPid());
            Long txByte = TrafficStats.getUidTxBytes(listApp.getAppsRunning().get(i).getPid());
            Log.d("pid process", "pid: " + listApp.getAppsRunning().get(i).getPid());

            Ndata = txByte;

            Log.d("data send", "send: " + Ndata);

            long diff =  currentDate.getTime() - lastDate.getTime();
            if(diff > 100* 1000)
            {
                Log.d("db", "difference plus 1 min app: " + pName);
                Nrun++;
            }
            Ntime = Ntime+diff;


            db.updateLaunchAndTime(Nrun, lastUpdated, pName, Ntime, Ndata);
        }
        //db.insertRunningP(pName   , lastUpdated);
    }
    db.close()

我检查了这段代码的功耗,不到总电池的 3%,所以现在这是我找到的最好的解决方案

于 2013-02-04T16:26:58.323 回答
2

我以前从未这样做过,但我很确定http://developer.android.com/reference/android/app/ActivityManager.html提供了您需要的信息。

于 2013-01-17T16:40:25.667 回答
1

如果您已植根您的设备,您还可以阅读使用情况统计文件以/data/system/usagestats/usage-*获取详细信息。

于 2013-08-26T07:37:57.703 回答