2013-01-17 10 views
5

Come posso ottenere il conteggio di avvio di tutte le applicazioni? Ho l'elenco completo delle app installate e ho una trasmissione quando viene installata un'applicazione, ma ho bisogno del numero di avvio di qualsiasi app. Vedo questo app con questo. Hai il tempo di CPU, il tempo di primo piano e il conteggio del lancio ... come fanno?broadcast per avere il numero di avvio dell'applicazione

risposta

2

Non l'ho mai fatto prima, ma sono abbastanza sicuro che l'http://developer.android.com/reference/android/app/ActivityManager.html fornisca le informazioni necessarie.

+0

Con l'activitymanager non puoi avere il tempo lanciato .. Probabilmente Con le statistiche della batteria puoi avere ... Hai qualche idea se è possibile avere un messaggio broadcast quando l'utente pranza un'applicazione? Grazie – AndreaC

+0

Non vedo comunque di farlo. – jsmith

+0

impossibile, questa applicazione ha lo statisco https://play.google.com/store/apps/details?id=com.rootuninstaller.bstatspro&hl=it – AndreaC

3

Finalmente lo faccio! creo un AlarmManager che ogni minuto controlla le applicazioni in esecuzione, se un'applicazione in esecuzione (in background o attiva) controllo l'ultima volta che l'ho vista. se questo tempo è maggiore di un minuto, aumento il conteggio. Ora sto cercando di avere quanti dati l'applicazione ha inviato a un server esterno, ho questi dati, ma sai se questi dati provengono da ho installato la mia applicazione o da quando avvio il mio smartphone?

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

questo codice è per ottenere il tempo di conteggio

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

ho controllato il potere consumare di questo codice ed è meno del 3% del totale della batteria, quindi per ora questa è la soluzione migliore che ho trovato

+0

il suo pessimo modo di farlo, perché scaricherà la batteria, lì dovrebbe essere un modo migliore per farlo. –

+0

@AndreaC Se utilizzo un'applicazione per 2 ore, quale sarà il conteggio di avvio in base alla risposta –

1

se si era rootato il dispositivo, è anche possibile leggere i file delle statistiche di utilizzo in /data/system/usagestats/usage-* per informazioni dettagliate.