Java Android如何知道应用程序已启动,并根据启动时间确定应用程序优先级

Java Android如何知道应用程序已启动,并根据启动时间确定应用程序优先级,java,android,android-layout,android-intent,Java,Android,Android Layout,Android Intent,在安卓系统中,人们如何知道应用程序已经启动。我想在启动时检测所有安装的应用程序,并根据其使用时间确定应用程序的优先级。有没有一个解决方案可以建议这样做 我知道使用广播,但当应用程序启动时,ActivityManager是否发送了一些意图,以及如何在代码中检测到这些意图?也欢迎任何其他解决方案。第一部分: 如果您知道应用程序的软件包名称,请尝试以下操作(将以下代码片段放入应用程序的onCreate方法中): 那么 boolean exit=false; 当(!退出) { List taskInf

在安卓系统中,人们如何知道应用程序已经启动。我想在启动时检测所有安装的应用程序,并根据其使用时间确定应用程序的优先级。有没有一个解决方案可以建议这样做


我知道使用广播,但当应用程序启动时,ActivityManager是否发送了一些意图,以及如何在代码中检测到这些意图?也欢迎任何其他解决方案。

第一部分:

如果您知道应用程序的软件包名称,请尝试以下操作(将以下代码片段放入应用程序的onCreate方法中):

那么

boolean exit=false;
当(!退出)
{ 
List taskInfo=am.getRunningTasks(1);
ComponentName componentInfo=taskInfo.get(0).topActivity;
if(componentInfo.getPackageName().equals(“您的包名”))
{
//你在这里工作吗
退出=真;
}
}
当您启动应用程序时,它将被放入组件信息中。taskInfo.get(0).topActivity将在前台返回活动。因此,您可以通过使用第二个代码段比较包来知道您的应用程序已经启动

注意:将第二个代码段放入Asynctask中,以便可以在后台检查应用程序是否已启动

第二部分:


要获得优先级,我认为您可以通过检查列表TaskInfo来实现,该列表将包含所有正在运行的应用程序。

上述代码是否适用于API级别高于21的应用程序?我已经尝试过了,但无法使用API级别22和23。请导游。你们有例外吗?详细解释发生了什么不,我们没有得到异常,但我们得到的包名为空。然而,我们使用AccessibilityService完成了这项工作。现在有一天getRunningTasks无法在android OS7上运行
 ActivityManager am= (ActivityManager) this.getSystemService(ACTIVITY_SERVICE); 
 boolean exit = false;
 while(!exit)
 { 
      List<RunningTaskInfo> taskInfo = am.getRunningTasks(1);
      ComponentName componentInfo = taskInfo.get(0).topActivity;
     if(componentInfo.getPackageName().equals("Your package name"))
     {
      //Do your work here
      exit = true;
     }
 }