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?
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
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);
}
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);
}
}
La ActivityManager :: getRunningTasks(int)
est obsolète depuis l'API 21. Plus d'informations ici .