广播有应用程序启动计数

时间:2013-01-17 16:17:00

标签: android android-activity broadcast launch

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

3 个答案:

答案 0 :(得分: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%,所以现在这是我找到的最佳解决方案

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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