【问题标题】:Android: How to know what application is opened to foreground and do something when it goes to backgroundAndroid:如何知道哪个应用程序被打开到前台并在它进入后台时做某事
【发布时间】:2014-12-06 10:38:54
【问题描述】:

标题不好,抱歉。能想办法简而言之。

所以,我正在开发一个适用于 Android 的应用程序,该应用程序将仅用于我自己的几款将公开使用的平板电脑。

我需要一个在后台运行的服务(或者我目前认为,如果可能的话,证明我错了)它跟踪哪个应用程序是前台,当该应用程序进入后台时,服务启动将进入前台并显示某些内容的活动给用户(例如一些广告,或者一些要求开始评分的审查窗口)。

这是怎么做到的?

谢谢。

E:其他应用程序可以是第 3 方,所以我不能修改它们的代码。

【问题讨论】:

    标签: android service background foreground


    【解决方案1】:

    当你当时开始其他活动时,你当前的活动是 OnPause() 状态,其他活动进入 onCreate() 状态。

    您必须为此推荐Activity LifeCycle

    【讨论】:

      【解决方案2】:

      您必须使用无障碍服务。从 Android Lollipop 开始,您无法收集此类信息。唯一的方法是通过可访问性docs

      【讨论】:

      • 如果你提供链接而不是官方文档来实现这一点会更好
      【解决方案3】:

      要检查其他正在运行的任务,您应该使用 ActivityManager。

         ActivityManager acm = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
          List<RunningTaskInfo> Ru_tasks = acm.getRunningTasks(NUMBER_OF_TASKS_U_WANT);
          if (!Ru_tasks .isEmpty()) {
              LOOP FOR EACH TASK (i is counter)
              ComponentName topActivity = tasks.get(i).topActivity; // Or replace .topactivity with task name
              if (topActivity.getPackageName().equals(WHAT_YOU LOOK FOR)) {
                        //Do WHAT YOU WANT!
              }
          }
      

      获得 GET_TASKS 权限

      【讨论】:

      • 我发现:“此方法在 API 级别 21 中已弃用。从 LOLLIPOP 开始,此方法不再可用于第三方应用程序:引入以文档为中心的最新消息意味着它可能会泄露个人信息给调用者。为了向后兼容,它仍会返回其数据的一小部分:至少是调用者自己的任务,可能还有其他一些已知不敏感的任务,例如 home。所以它不再是那么好的选择。我可以将平板电脑保持在 4.4,但有一天我可能想要 5.0
      猜你喜欢
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多