如何在android中以编程方式查找当前正在运行的应用程序?
我对Android非常陌生。 我正在处理的应用程序必须获取有关当前在前台运行的应用程序的信息。
这意味着如果用户启动任何应用程序,我的应用程序应该捕获启动的应用程序信息,直到我的应用程序不应该中断启动的应用程序。
例如:如果用户启动浏览器应用程序,我的应用程序应该打印浏览器应用程序信息日志
我该怎么做?
ActivityManager activity_manager = (ActivityManager) context .getSystemService(Activity.ACTIVITY_SERVICE);
ActivityManager
有方法getRunningTasks(int)
。 ActivityManager
似乎是你正在寻找的解决scheme。
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用户执行的最近的任务
你可以使用类似这样的东西:
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); }
这段代码将提供当前的活动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); } }
ActivityManager :: getRunningTasks(int)
自API 21以来已弃用。