如何在Android中以编程方式查找当前正在运行的应用程序?

时间:2011-11-11 08:22:06

标签: java android android-service

我是Android新手。我正在开发应用程序,必须获取有关当前正在前台运行的应用程序的信息。

这意味着如果用户启动任何应用程序,我的应用程序应该捕获已启动的应用程序信息,直到我的应用程序不应该中断已启动的应用程序。

示例:如果用户启动浏览器应用程序,我的应用程序应在日志上打印浏览器应用程序信息

我该怎么做?

4 个答案:

答案 0 :(得分:21)

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

另外,看一下以下主题: See Android recent task executed by the user

答案 1 :(得分:8)

你可以使用类似的东西:

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

答案 2 :(得分:0)

此代码将提供当前活动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);
    }
}

答案 3 :(得分:0)

出于安全原因,自API 21起不推荐使用

ActivityManager.getRunningTasks(int)。您可以使用ActivityManager.RunningTaskInfo()至少获取运行此活动的当前任务的任务信息(尽管API 29弃用了RunningTaskInfo()的某些字段,而不是整个方法)。

有关运行的TaskInfo()的更多信息,请参见Google's docs