5

すべてのアプリケーションの起動回数を取得するにはどうすればよいですか? インストールされているアプリの完全なリストがあり、アプリケーションがインストールされたときにブロードキャストがありますが、アプリの起動回数が必要です。私はこれでこのアプリを見ます。CPU時間、フォアグラウンド時間、および起動カウントがあります...どうやってそれを行うのですか??

4

3 に答える 3

3

最後に私はそれをします!実行中のアプリケーションを毎分チェックする AlarmManager を作成します。アプリケーションが実行中 (バックグラウンドまたはアクティブ) の場合は、最後に見た時間をチェックします。この時間が 1 分を超える場合は、カウントを増やします。今、アプリケーションが外部サーバーに送信したデータの数を取得しようとしています。このデータはありますが、このデータがアプリケーションをインストールしたときのものなのか、スマートフォンを起動したときのものなのか知っていますか?

 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 に答える