2011-11-11 13 views
14

Sono molto nuovo per Android. Sto lavorando su un'applicazione che deve ottenere le informazioni sulle applicazioni attualmente in esecuzione in primo piano.Come trovare le applicazioni attualmente in esecuzione in modo programmatico su Android?

Significa che se l'utente avvia qualsiasi applicazione, la mia applicazione dovrebbe acquisire le informazioni sull'applicazione avviata, nel momento in cui la mia applicazione non deve interrompere l'applicazione avviata.

Esempio: se l'utente avvia l'applicazione browser, la mia applicazione deve stampare le informazioni dell'applicazione browser nel registro.

Come posso fare questo?

+1

Eventuali duplicati: http://stackoverflow.com/questions/3304685/how-to-get-the-list-of-running-applications – Rob

+0

plz controllare questo codice http://stackoverflow.com/ questions/3278895/how-to-check-current-running-applications-in-android grazie –

+0

Questo non sembra essere un * esatto * duplicato delle domande di riferimento; questo sembra voler mancare le informazioni quando vengono avviate le app e riguarda anche le app in esecuzione in primo piano. –

risposta

21
ActivityManager activity_manager = (ActivityManager) context 
       .getSystemService(Activity.ACTIVITY_SERVICE); 

ActivityManager ha metodo getRunningTasks(int). ActivityManager sembra essere la soluzione che stai cercando.

final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
final List<RunningTaskInfo> recentTasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i = 0; i < recentTasks.size(); i++) 
{ 
    Log.d("Executed app", "Application executed : " +recentTasks.get(i).baseActivity.toShortString()+ "\t\t ID: "+recentTasks.get(i).id+"");   
} 

Inoltre, uno sguardo a questo thread: See Android recent task executed by the user

+14

Il metodo ['getRunningTasks (int maxNum)', è stato deprecato nel livello API 21 (LOLLIPOP)] (http://developer.android.com/reference/android/app/ActivityManager.html#getRunningTasks (int)), per motivi di sicurezza, la possibilità di divulgare informazioni personali a applicazioni di terzi. (Se si utilizza questo metodo per essere consapevoli del fatto che non sarà supportato per versioni future di Android). –

+0

Qualcuno ha trovato una soluzione che funzioni davvero per fare la stessa cosa di getRunningTasks (int maxNum)? Molte grazie! –

8

Si può usare qualcosa di simile a questo:

ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE); 

for (int i = 0; i < tasks.size(); i++) { 
    Log.d("Running task", "Running task: " + tasks.get(i).baseActivity.toShortString() + "\t\t ID: " + tasks.get(i).id); 
} 
+0

Grazie a tutti per la riproduzione. Dal codice precedente posso ottenere informazioni sulle applicazioni attualmente in esecuzione quando apro la mia applicazione. Come posso fare senza interrompere l'altra applicazione la mia app dovrebbe avere informazioni attualmente in esecuzione e dovrebbe mostrarla in logcat. se qualche corpo sa per favore aiutami sto lottando per farlo. – pushpa

+0

come posso trovare l'icona per l'applicazione attualmente in esecuzione? – user3233280

1

Questo codice fornirà la corrente acitvity logcat

Process logcatProc; 
List <String> progs = new ArrayList <String>(); 

progs.add("logcat"); 
progs.add("-v"); 
progs.add(mFormat.getValue()); 
if (mBuffer != Buffer.MAIN) { 
     progs.add("-b"); 
     progs.add(mBuffer.getValue()); 
} 
progs.add("*:" + mLevel); 

logcatProc = Runtime.getRuntime() 
       .exec(progs.toArray(new String[0])); 

mReader = new BufferedReader(new InputStreamReader(
       logcatProc.getInputStream()), 1024); 

String line; 
while (mRunning && (line = mReader.readLine()) != null) { 
    if (!mRunning) { 
      break; 
    } 
    if (line.length() == 0) { 
      continue; 
    } 
    if (mIsFilterPattern) { 
     if (mFilterPattern != null && !mFilterPattern.matcher(line).find()) { 
      continue; 
     } 
    } else { 
     if (mFilter != null && !line.toLowerCase().contains(mFilter.toLowerCase())) { 
      continue; 
     } 
    } 
    synchronized (mLogCache) { 
      mLogCache.add(line); 
    } 
} 
0

Il ActivityManager :: getRunningTasks(int) è obsoleto poiché API 21. Altre informazioni here.

Problemi correlati