Как найти программные приложения, запущенные в настоящее время, в Android?
Я очень новичок в Android. Я работаю над приложением, которое должно получить информацию о приложениях, выполняемых в настоящее время на переднем плане.
Это означает, что если пользователь запускает какие-либо приложения, мое приложение должно захватить запущенную информацию о приложении, к моменту, когда мое приложение не должно прерывать запущенное приложение.
Пример. Если пользователь запускает приложение-браузер, мое приложение должно печатать информацию о приложении браузера в журнале.
Как я могу это сделать?
Ответы
Ответ 1
ActivityManager activity_manager = (ActivityManager) context
.getSystemService(Activity.ACTIVITY_SERVICE);
ActivityManager
имеет метод getRunningTasks(int)
. ActivityManager
похоже, решение, которое вы ищете.
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+"");
}
Кроме того, посмотрите следующий поток:
См. недавнюю задачу Android, выполненную пользователем
Ответ 2
Вы можете использовать что-то похожее на это:
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);
}
Ответ 3
Этот код предоставит текущий logcat acitvity
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);
}
}
Ответ 4
ActivityManager :: getRunningTasks(int)
устарел с API 21. Дополнительная информация здесь.