Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

broadcast to have application launch count

How can I get the launch count of all applications? I have the complete list of installed apps, and I have a broadcast when an application is installed, but I need the launch count of any apps. I see this app with this. You have the cpu time, the foreground time, and the launch count... how do they do it??

like image 776
AndreaC Avatar asked Jan 17 '13 16:01

AndreaC


Video Answer


2 Answers

Finally i do that! i create a AlarmManager that every minute check the running applications, if an application in running (background or active) i check the last time that i saw it. if this time is greater than one minute i increase the count. Now i'm trying to have how many data the application sent to an external server, i have this data, but do you know if this data is from i have installed my application or from when i boot my smartphone?

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

this code is for get the count time

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()

I checked the power consume of this code and is less than 3% of total battery, so for now this is the best solution that i have found

like image 166
AndreaC Avatar answered Sep 29 '22 22:09

AndreaC


I've never done it before, but I'm pretty sure http://developer.android.com/reference/android/app/ActivityManager.html provides the information you need.

like image 42
jsmith Avatar answered Sep 29 '22 23:09

jsmith