Android 广播以获得应用程序启动计数

Android 广播以获得应用程序启动计数,android,android-activity,broadcast,launch,Android,Android Activity,Broadcast,Launch,如何获取所有应用程序的启动计数?我有已安装应用程序的完整列表,并且在安装应用程序时有广播,但我需要所有应用程序的启动计数。 我看到这个和这个。您有cpu时间、前台时间和启动计数。。。他们是怎么做的呢?我以前从来没有做过,但我很确定提供了您需要的信息。最后我做了!我创建了一个AlarmManager,每分钟检查一次正在运行的应用程序,如果应用程序正在运行(后台或活动),我会检查上次看到它的时间。如果此时间大于一分钟,我将增加计数。 现在我正在尝试获取应用程序发送到外部服务器的数据,我有这些数据,但

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

我以前从来没有做过,但我很确定提供了您需要的信息。

最后我做了!我创建了一个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()
for(int i=0;i100*1000)
{
Log.d(“db”,“差异加1分钟应用程序:”+pName);
Nrun++;
}
Ntime=Ntime+diff;
db.UpdateLanchandTime(Nrun、lastUpdated、pName、Ntime、Ndata);
}
//db.insertRunningP(pName,最近更新);
}
db.close()

我检查了这段代码的功耗,它不到电池总电量的3%,因此目前这是我找到的最好的解决方案

如果你已经建立了设备的根目录,你还可以阅读
/data/system/usagestats/usagestats-*
中的使用情况统计文件,以获取详细信息。

使用activitymanager,你无法获得启动时间。。也许有了电池数据,你就可以。。。你知道用户在使用应用程序时是否可能有广播消息吗?谢谢,我看无论如何也不可能这么做。这是不可能的,这个应用程序有统计功能。这是一个非常糟糕的方法,因为它会耗尽电池电量,应该有更好的方法来做到这一点。@AndreaC如果我使用一个应用程序2小时,根据你的回答,启动计数是多少