См. недавнюю задачу Android, выполненную пользователем

Я хотел бы посмотреть недавнюю задачу моего телефона Android. Я пробовал какой-то код из Интернета, но ни один из них не работает должным образом. Я просто хочу получить PID и имя последнего приложения, выполненного пользователем. Например, если я запускаю приложение-калькулятор, а затем последнее приложение-задачу, которое я создал, это приложение должно быть в состоянии сказать мне что-то вроде: «последнее приложение, которое вы выполнили, это« калькулятор », а PID —« 2222 ». ".

Я проверял веб-страницу разработчиков Android на наличие некоторого кода, и это то, что я нашел, но я не знаю, как реализовать для Android.

ActivityManager.RecentTaskInfo Информация, которую вы можете получить о задачах, которые пользователь недавно запускал или посещал.

ActivityManager.RunningServiceInfo Информация, которую вы можете получить о конкретной Службе, которая в данный момент запущена в системе.

любое предложение,

С наилучшими пожеланиями

ActivityManager.RunningTaskInfo Информация, которую вы можете получить о конкретной задаче, которая в данный момент «выполняется» в системе.


person Martin Solac    schedule 11.03.2011    source источник


Ответы (3)


int numberOfTasks = 1;
ActivityManager m = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE);
//Get some number of running tasks and grab the first one.  getRunningTasks returns newest to oldest
RunningTaskInfo task = m.getRunningTasks(numberOfTasks).get(0);

//Build output
String output  = "the last application you've executed is '"+task.id+"' and the PID is '"+task.baseActivity.toShortString()+"'";

getRunningTasks

RunningTaskInfo

person rgmills    schedule 11.03.2011

Вот мое решение:

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

Будьте осторожны!! Последний ID не является PID процесса!! Если вы хотите получить PID процесса, я использовал следующую команду:

mLogcatProc = Runtime.getRuntime().exec(new String[] {"ps"}); 

Прочитайте результат, найдя имя приложения, а затем разделите его, чтобы получить процесс PID.

person Martin Solac    schedule 14.03.2011
comment
но как я могу разделить эту строку? - person Smile; 09.02.2014
comment
какие разрешения требуются? - person Abdul Wahab; 20.03.2014
comment
getRunningTasks устарел, начиная с API 21 - person Pointer Null; 29.11.2014

Недавно я проверял доступные сервисы, которые также использовали диспетчер активности. Возможно, просто измените это на метод getRecentTasks(int maxNum, int flags) и измените приведенное ниже в соответствии с вашими потребностями!?

private boolean isServiceOnline() {

            final ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);

            final List<ActivityManager.RunningServiceInfo> services = activityManager.getRunningServices(Integer.MAX_VALUE);
            for (int i = 0; i < services.size(); i++) {
                String packageClassName = services.get(i).service.getClassName();
                if (packageClassName.equals("org.couchdb.android.CouchService")) {
                    Log.d(TAG, "Service Nr. " + i + " :" + services.get(i).service);
                    Log.d(TAG, "Service Nr. " + i + " package name : " + services.get(i).service.getPackageName());
                    Log.d(TAG, "Service Nr. " + i + " class name : " + packageClassName);
                    ;
                    return true;
                }
            }
            return false;
        }
person chris polzer    schedule 11.03.2011