【问题标题】:Android how to know an app has been started and range apps priority according the starting timesAndroid如何知道应用程序已启动并根据启动时间确定应用程序的优先级
【发布时间】:2014-01-02 01:27:58
【问题描述】:

在 Android 中,如何知道应用程序已启动。我想检测启动时安装的所有应用程序,并根据其使用时间确定应用程序的优先级。有没有建议这样做的解决方案?

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

【问题讨论】:

    标签: java android android-layout android-intent


    【解决方案1】:

    第一部分

    如果你知道你应用的包名,试试这个(把下面的 sn-p 放在你应用的 onCreate 方法中):

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

    当您启动您的应用程序时,这将被放入 componentInfotaskInfo.get(0).topActivity 将返回前台的活动。因此,您可以通过使用第二个代码 sn-p 比较包来知道您的应用程序已启动。

    注意:将第二个代码sn-p放在一个Asynctask中,这样就可以在后台检查应用是否已经启动 em>。

    第二部分:

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

    【讨论】:

    • 上述代码是否适用于 21 以上的 API 级别?我已经尝试过,但不适用于 API 级别 22 和 23。请指导。
    • 你有异常吗?详细解释发生了什么
    • 不,我们没有得到异常,但是我们得到了包名空白。然而,我们已经使用 AccessibilityService 完成了它。 stackoverflow.com/a/27642535/1365460
    • 现在 getRunningTasks 无法在 android OS7 上运行
    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 2019-06-15
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多