Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中以编程方式查找当前正在运行的应用程序?_Java_Android_Android Service - Fatal编程技术网

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

Java 如何在Android中以编程方式查找当前正在运行的应用程序?,java,android,android-service,Java,Android,Android Service,我对安卓非常陌生。我正在开发一个应用程序,该应用程序必须获取当前在前台运行的应用程序的相关信息 这意味着,如果用户启动任何应用程序,我的应用程序应该捕获启动的应用程序信息,此时我的应用程序不应该中断启动的应用程序 示例:如果用户启动浏览器应用程序,我的应用程序应在日志上打印浏览器应用程序信息 我该怎么做 ActivityManager activity_manager = (ActivityManager) context .getSystemService(Ac

我对安卓非常陌生。我正在开发一个应用程序,该应用程序必须获取当前在前台运行的应用程序的相关信息

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

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

我该怎么做

ActivityManager activity_manager = (ActivityManager) context
                .getSystemService(Activity.ACTIVITY_SERVICE);
ActivityManager
具有方法
getRunningTasks(int)
<代码>活动管理器似乎是您正在搜索的解决方案

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+"");         
}
final ActivityManager ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
最终列表recentTasks=activityManager.getRunningTasks(Integer.MAX_值);
对于(int i=0;i
另外,请查看以下线程:

您可以使用类似的方法:

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);
}
ActivityManager ActivityManager=(ActivityManager)getSystemService(Context.ACTIVITY_服务);
列表任务=activityManager.getRunningTasks(整数.MAX_值);
对于(int i=0;i
此代码将提供当前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);
    }
}
processlogcatproc;
List progs=new ArrayList();
程序添加(“logcat”);
程序添加(“-v”);
progs.add(mFormat.getValue());
if(mBuffer!=Buffer.MAIN){
程序添加(“-b”);
progs.add(mBuffer.getValue());
}
程序添加(“*:”+mLevel);
logcatProc=Runtime.getRuntime()
.exec(progs.toArray(新字符串[0]);
mReader=新的缓冲区读卡器(新的InputStreamReader(
logcatProc.getInputStream()),1024);
弦线;
while(mrrunning&(line=mReader.readLine())!=null){
如果(!mRunning){
打破
}
if(line.length()==0){
继续;
}
if(错误过滤模式){
if(mFilterPattern!=null&&!mFilterPattern.matcher(line.find()){
继续;
}
}否则{
如果(mFilter!=null&&!line.toLowerCase()包含(mFilter.toLowerCase()){
继续;
}
}
已同步(mLogCache){
mLogCache.add(行);
}
}

ActivityManager.getRunningTasks(int)
由于安全原因,自API 21以来一直被弃用。您可以使用
ActivityManager.RunningTaskInfo()
至少获取此活动正在运行的当前任务的任务信息(尽管API 29不推荐使用RunningTaskInfo()的某些字段,而不是整个方法)


有关RunningTaskInfo()的更多信息,请参阅。

可能重复:请检查此代码,谢谢。这似乎与参考问题不完全相同;这一个似乎需要应用启动时的信息,并且只关心前台运行的应用。@THelper:谢谢你的建议,我不知道这些事情。自API 21以来,
ActivityManager::getRunningTasks(int)
已被弃用。更多信息>。感谢大家的重播。通过以上代码,我可以在打开应用程序时获取当前正在运行的应用程序信息。如何避免中断其他应用程序?我的应用程序应获取当前正在运行的信息,并应在logcat中显示。如果有人知道,请帮助我努力做到这一点。我如何找到当前正在运行的应用程序的图标?出于安全原因,该方法可能会将个人信息泄露给第三方应用程序。(如果您使用此方法是为了意识到未来的Android版本将不支持它)。是否有人找到了一种与getRunningTasks(int-maxNum)完全相同的解决方法?谢谢!我必须把代码放在哪里?我尝试将代码放在onCreate上,它只显示main活动,即使我尝试打开其他应用程序。即使我将代码放在服务类的run()方法上,它也只显示MainActivity