Android后台服务判断前台应用程序

2024-04-19

我正在开发一个应用程序,可以监控全天的手机使用情况。为此,我有一个后台服务,该服务在设备启动时启动,并不断轮询以找出当前的前台应用程序是什么。当我单击一个应用程序然后退出并单击另一个应用程序时,以下代码将起作用。现在假设我打开浏览器并转到另一个网页,它将停止将浏览器注册为前台应用程序。或者例如,我打开google talk,它会将其注册为当前活动,但是当我发送消息时,它将不再将其注册为前台应用程序。关于导致此错误的原因有什么想法或想法吗?如果需要,我会提供任何其他信息,请告诉我。 也许答案就在这篇文章中,但我找不到它......从后台任务或服务确定当前前台应用程序 https://stackoverflow.com/questions/2166961/determining-the-current-foreground-application-from-a-background-task-or-service

public static RunningAppProcessInfo getForegroundApp() throws NameNotFoundException{
    RunningAppProcessInfo result = null, info = null;
    String currApp = null;
    am = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
    Drawable icon = null;
List <RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator <RunningAppProcessInfo> i = l.iterator();
PackageManager pm = context.getPackageManager();

while(i.hasNext()){
    info = i.next();
        if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && getActivityForApp(info)!=null ){

            try {
                currApp = getCurrentApplication(info);
                System.out.println(currApp);
                System.out.println(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
                icon = pm.getApplicationIcon(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
                System.out.println(getActivityForApp(info));
            } catch (NameNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            }
        }
    break;       
}

return result;

}

private static ComponentName getActivityForApp(RunningAppProcessInfo target){
    ComponentName result=null;
    ActivityManager.RunningTaskInfo info;

    if(target==null)
        return null;

    if(am==null)
        am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
    List <ActivityManager.RunningTaskInfo> l = am.getRunningTasks(9999);
    Iterator <ActivityManager.RunningTaskInfo> i = l.iterator();

    while(i.hasNext()){
        info=i.next();
        if(info.baseActivity.getPackageName().equals(target.processName)){
            result=info.topActivity;
            break;
        }
    }
    return result;
}

下面的代码对我有用。列表中的第一个任务是我需要确定前台应用程序名称。

ActivityManager activityManager = (ActivityManager) getSystemService(UpdateService.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> appProcesses = activityManager.getRunningTasks(1);

Log.i("MyApp", "Foreground Package: " + appProcesses.get(0).topActivity.getPackageName());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android后台服务判断前台应用程序 的相关文章

随机推荐

  • 在哪里设置服务引用上的 CookieContainer?

    例如 当将 WebService 引用添加到 NET 2 0 项目上的 ASMX 服务时 var objService new NameSpace groupservices 那里存在 objService CookieContainer
  • 不在办公室时进行源代码控制

    有时我不在办公室时会编写代码 我想在未连接到公司网络时继续使用源代码控制的好处 我理想的系统将允许我将修订签入笔记本电脑上的存储库 然后当我连接到公司网络时 该存储库将与我们的主 SVN 存储库同步 当与主存储库同步时 如果可以维护单独的签
  • 这是企图破坏我的 ASP.Net 站点的安全吗?

    我对 ASP NET 还很陌生 我最近在我的网站上设置了自动电子邮件 以通知我未处理的异常情况 就在几个小时前 3 分钟内出现了 10 个未处理的异常 并且所有堆栈跟踪都是相似的 错误消息中有很多我不明白的内容 但我不喜欢它的样子 以下是其
  • 在 Java 中存储 Enum 的顺序

    在java中 EnumSet使用位掩码 位向量存储它包含的项目long RegularEnumSet or long JumboEnumSet 我现在遇到了一个用例 其中我有数千个域对象 让我们称它们为Node 每个都将显示枚举的所有项目
  • 对于不区分大小写的 jQuery :contains 选择器,有什么方法可以加快此解决方案的速度吗?

    I found 这个解决方案 https stackoverflow com questions 187537 is there a case insensitive jquery contains selector 783874 7838
  • 如何从 Ansible 中的指定组中删除用户?

    我们假设user01定义了两个组 groupA and groupB 除了主要组之外 我可以将帐户添加到groupC 确保user01属于groupC using user name user01 groups groupC append
  • UITableViewCell 中的自动布局 UILabel

    我正在使用 autoLayout 并且对它很陌生 我有一个如下所示的 UITableView Cell UITableViewCell 高度是动态的 因此它的高度根据文本而变化 我有两个标签 A 和 B 它们可以有可变长度的文本 但宽度是固
  • 使用 ffmpeg 将带有 Alpha 的 .mov 转换为带有 alpha 的 .webm 时出现错误“使用 auto_alt_ref 进行透明度编码不起作用”

    我正在尝试将具有 alpha 透明度的 mov 文件转换为 webm 文件 并一直在关注此线程以寻求帮助 使用 ffmpeg 将带 Alpha 的 mov 转换为带 Alpha 的 VP9 Webm https stackoverflow
  • 从 URL 中删除特殊字符

    我想删除网址中的任何特殊字符 我尝试使用 StringEscapeUtils 类来删除特殊字符 但那没有用 例如 http 3A 2Ffeeds feedburner com 2FNdtvNews TopStories 欢迎任何想法 我过去
  • 如何将字符串转换为按类型

    如何将 String 转换为 By 类型 以下是我的场景 按以下方式将对象标识保留在属性文件中 username By id username password By id password 在应用程序中我想检索像 Properties p
  • 如何在 ul 元素上触发 focusout 事件?

    我有一个可以改变外观的插件select所有浏览器上的 html 标签 我正在尝试使新样式的元素集表现得像正常元素一样select标签 我快到了 但我只需要弄清楚一件事 那就是如何隐藏ul集中注意力 首先 这是新的 select 元素的演示
  • 如何在swift 2中通过短信发送验证码

    我为我的应用程序构建了一个注册表单 我需要通过短信向用户发送验证码才能完成注册过程 我尝试使用 MFMessageComposeViewController 但它打开设备上的对话框短信 以便用户可以看到代码 我还检查了网络上是否有发送短信的
  • Django 中 DateTimeField 的过期逻辑

    我在服务模型中有一个 DateTimeField 定义如下 pub date models DateTimeField default timezone now blank True 我想在我的代码中创建一些过期逻辑 以便超过 2 个月的服
  • 有没有办法在运行时找到 PackageFamilyName?

    有没有办法在运行时找出 PackageFamilyName 如清单中所示 我查看了 Program Files WindowsApps 但找不到相关的字符串 找不到任何 API 可以让我这样做 欢迎任何其他想法 我想你正在寻找的是包 ID
  • Discord.py:wait_for('reaction_add')未按预期工作

    我正在尝试在discord py 上制作一个常见问题解答机器人 到目前为止进展顺利 我想添加一个额外的功能 当机器人检测到常见问题解答时 机器人不会直接发送答案 而是会发送一条提示消息 其中包含两种反应 竖起大拇指和竖起大拇指 具体取决于所
  • 错误:“defaultfloat”不是“std”的成员

    std defaultfloat尽管在 GCC 中似乎没有定义在标准中 http www cplusplus com reference ios defaultfloat 我认为是 27 5 6 4 我将其隔离为这个简单的程序 test c
  • FirebaseInstanceId 不再存在

    我刚刚升级了所有 Firebase 依赖项 但遇到了问题 FirebaseInstanceId不再被认可 我用它来获取令牌 id 如下所示 String tokenId FirebaseInstanceId getInstance getT
  • Mercurial 工作流程是否可以通过未提交的更改进行更新?

    因此 我的网站从 CVS 切换到 Mercurial 我遇到的最大问题是 如果我正在处理一些我不想提交的文件 我只需保存它们 然后我还有其他文件想要推送到服务器 但是如果其他人已经制作了对存储库进行更改 然后我将它们拉下来 它要求我合并或变
  • 如何在flutter中显示base64格式的pdf?

    我有 base64 格式的 pdf 内容 我需要在 flutter 应用程序的容器中显示它 我正在尝试使用 dart 中的图像 pdf 和转换包来完成此操作 但我收到图像类错误 并且我不知道如何显示图像 List
  • Android后台服务判断前台应用程序

    我正在开发一个应用程序 可以监控全天的手机使用情况 为此 我有一个后台服务 该服务在设备启动时启动 并不断轮询以找出当前的前台应用程序是什么 当我单击一个应用程序然后退出并单击另一个应用程序时 以下代码将起作用 现在假设我打开浏览器并转到另