See Android recent task executed by the user

2019-01-07 19:21发布

问题:

I would like to watch the recent task of my android phone. I was trying some code from internet but non of them work properly. I just want to get the PID and Name of the last application executed by the user. For example, if I execute the calculator application and after that the recent task application that I made, this application shoul be able to tell me something like: "the last application you've executed is 'calculator' and the PID is '2222'".

I was checking on Android developers web page for some code and this is what I found, but I don't know how to implement for Android.

ActivityManager.RecentTaskInfo Information you can retrieve about tasks that the user has most recently started or visited.

ActivityManager.RunningServiceInfo Information you can retrieve about a particular Service that is currently running in the system.

any suggestion,

Best regards

ActivityManager.RunningTaskInfo Information you can retrieve about a particular task that is currently "running" in the system.

回答1:

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



回答2:

Here is my solution:

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

Be careful!!The last ID is not the PID of the process!! If you want to get the PID of the process I used the following command :

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

Read the result finding the application name and then split to obtain PID process.



回答3:

I was recently checking on available services which also was using the activity manager. Probably just change this to the getRecentTasks(int maxNum, int flags) method and modify the below to your needs!?

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;
        }


标签: android task pid