如何在Android中检查特定应用程序是否正在运行

4

我正在开发一个需要检查特定应用程序是否在运行的应用。我正在使用以下代码,但它总是通过Toast消息告诉我正在运行的应用程序未运行。

所使用的函数代码:

boolean isNamedProcessRunning(String processName){
  if (processName == null) 
   return false;

  ActivityManager manager = 
     (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
  List<RunningAppProcessInfo> processes = manager.getRunningAppProcesses();
  for (RunningAppProcessInfo process : processes)
  {
     if (processName.equals(process.processName))
     {
         return true;
     }
  }
  return false;
 }

函数调用:

if(isNamedProcessRunning("WhatsApp")){
    Toast.makeText(this.getBaseContext(),"WhatsApp running", Toast.LENGTH_SHORT).show();
}
else{
    Toast.makeText(this.getBaseContext(),"WhatsApp Not running", Toast.LENGTH_SHORT).show();

}

尝试打印所有manager.getRunningAppProcesses()并检查实际名称是否存在,这非常容易...您可以检查进程名称:if (processName.contains(process.processName)) - Viktor Yakunin
这个API被标记为弃用了,你不应该期望它能在最新版本或未来的版本中正常工作,一直以来我们都警告你不要依赖于它。设计初衷是用户不能发现其他正在运行的内容,因为这些信息经常被滥用在一些不良应用上。而且,在Android系统中,“正在运行”本身的意义也相对较小。 - Chris Stratton
2个回答

2

通常应用程序进程名称类似于包名 "com.android.example",例如 "com.android.pandora"。你是否尝试过 "com.whatsapp" 或 "com.android.whatsapp"?

在循环中,打印出所有的进程,这样可以确保你正确获取了 WhatsApp 进程的名称。


0

若想检查您的应用程序是否在运行,请使用以下代码进行检查。

    ActivityManager.RunningAppProcessInfo myProcess = new ActivityManager.RunningAppProcessInfo();
    ActivityManager.getMyMemoryState(myProcess);
    Boolean isInBackground = myProcess.importance != ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接