¿Cómo encontrar las aplicaciones actualmente en ejecución programáticamente en Android?

Soy muy nuevo en Android. Estoy trabajando en la aplicación que debe obtener la información sobre las aplicaciones que se ejecutan actualmente en primer plano.

Significa que si el usuario inicia alguna aplicación, mi aplicación debería capturar la información de la aplicación lanzada, para cuando mi aplicación no deba interrumpir la aplicación iniciada.

Ejemplo: si el usuario inicia la aplicación del navegador, mi aplicación debería imprimir la información de la aplicación del navegador en el registro.

¿Cómo puedo hacer esto?

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

ActivityManager tiene el método getRunningTasks(int) . ActivityManager parece ser la solución que está buscando.

 final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); final List 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+""); } 

Además, eche un vistazo al siguiente hilo: vea la última tarea de Android ejecutada por el usuario

Puedes usar algo similar a esto:

 ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List 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); } 

Este código proporcionará el logcat acitvity actual

 Process logcatProc; List  progs = new ArrayList (); 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); } } 

ActivityManager :: getRunningTasks(int) está en desuso desde API 21. Más información aquí .