2013-01-17 44 views
5

如何獲取所有應用程序的啓動計數?我有已安裝的應用程序的完整列表,並且在安裝應用程序時我有廣播,但我需要任何應用程序的啓動計數。 我看到這個app與此。你有cpu時間,前臺時間和發佈計數......他們怎麼做?廣播有應用程序啓動計數

回答

2

我從來沒有做過,但我很確定http://developer.android.com/reference/android/app/ActivityManager.html提供您需要的信息。

+0

隨着活動管理者你不能有推出的時間..可能隨着電池狀態你可以有...你有任何想法,如果其可能的浩有廣播messagge當用戶午餐一個應用程序? 謝謝 – AndreaC

+0

反正我看不出來。 – jsmith

+0

這是不可能的,這個應用程序有https://play.google.com/store/apps/details?id=com.rootuninstaller.bstatspro&hl=it – AndreaC

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%,所以現在這是最好的解決方案,我已經找到

+0

它非常糟糕的方式來做到這一點,因爲它會消耗電池,在那裏應該是一些更好的方法來做到這一點。 –

+0

@AndreaC如果我使用了一個2小時的應用程序,根據你的回答將啓動計數 –

1

如果您已經植根您的設備,您還可以閱讀/data/system/usagestats/usage-*中的使用統計文件以瞭解詳細信息。

相關問題