web-dev-qa-db-fra.com

Comment trouver les applications en cours d'exécution par programmation dans Android?

Je suis très nouveau sur Android. Je travaille sur une application qui doit obtenir des informations sur les applications en cours d'exécution au premier plan.

Cela signifie que si l'utilisateur lance une application, mon application doit capturer les informations de l'application lancée, au moment où mon application ne doit pas interrompre l'application lancée.

Exemple: si l'utilisateur lance une application de navigateur, mon application doit imprimer les informations de l'application de navigateur dans le journal.

Comment puis-je faire ceci?

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

ActivityManager a la méthode getRunningTasks(int). ActivityManager semble être la solution que vous recherchez.

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+"");         
}

Consultez également le fil suivant: Voir la tâche récente Android exécutée par l'utilisateur

21
drooooooid

Vous pouvez utiliser quelque chose de similaire à ceci:

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);
}
8
Caner

Ce code fournira l'actuel 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);
    }
}
1
elamathy

La ActivityManager :: getRunningTasks(int) est obsolète depuis l'API 21. Plus d'informations ici .

0
Toochka