查询运行在顶部的app包名及类名

news2024/9/28 11:32:53

androidActivityManager会在logcat中打印出当前正在显示的app的包名以及类名,注,这是由ActivityManager打印,使用的日志TAG就是ActivityManager,所以我们在过虑信息时不能以自己程序的进程进行过滤,使用ActivityManager作为TAG过虑即可,当然ActivityManager还会显示其它信息,还可以使用Displayed来进行过虑,这样显示的信息就更少一些了,使用新版Logcat示例如下:
在这里插入图片描述
可以看到,显示的信息为:

Displayed org.appspot.loginactivity/.MainActivity: +253ms

Displayed 说明了当前正在显示的应用,当前显示的应用包名为org.appspot.loginactivity,类名为.MainActivity,这是一个相对路径的类名,完整路径为org.appspot.loginactivity.MainActivity,这个界面启动的时间为:253ms

有了这些信息,我们就可以使用Intent来启动这个app了:

val intent = Intent()
intent.setClassName("org.appspot.loginactivity", "org.appspot.loginactivity.MainActivity")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)

注:这里的类名必须要使用完整路径的类名org.appspot.loginactivity.MainActivity,不能使用.MainActivity这样的相对路径。

这有什么用呢?比如公司要我做一个自定义Launcher,只能显示公司的app和一些必要的系统自带app,自定义Launcher显示了需要的app,当点击app图标时,就需要打开该app,此动作由openApp函数实现,如下:

/** 打开指定包名的app */
fun openApp(packageName: String) {
    val launcherActivityName = getLauncherActivityNameByPackageName(packageName)
    if (launcherActivityName.isNullOrBlank()) {
        val text = "无法启动应用:$packageName,因为获取不到该应用的启动类"
        Toast.makeText(ContextHolder.getContext(), text, Toast.LENGTH_SHORT).apply { setGravity(Gravity.CENTER, 0, 0) }.show()
        return
    }
    val intent = Intent(Intent.ACTION_MAIN).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK
        component = ComponentName(packageName, launcherActivityName)
    }
    ContextHolder.getContext().startActivity(intent)
}
private fun getLauncherActivityNameByPackageName(packageName: String): String? {
    val resolveIntent = Intent(Intent.ACTION_MAIN).apply {
        addCategory(Intent.CATEGORY_LAUNCHER) // 无图标的启动类没有这个Category
        setPackage(packageName)
    }
    val resolveInfoList: List<ResolveInfo> = ContextHolder.getContext().packageManager.queryIntentActivities(resolveIntent, 0)
    val iterator = resolveInfoList.iterator()
    return if (iterator.hasNext()) iterator.next().activityInfo?.name else null
}

如上代码,只需要给openApp(packageName: String)函数传入一个应用的包名,即可实现打开该包名对应的app,但是有一个应用我们无法打开,就是“下载”app,这是一个系统应用,比如我们在浏览器下载了一个app,在“下载”app中可以列出浏览器中下载的文件,“下载”app如下:
在这里插入图片描述
在这里插入图片描述
由于通过前面的openApp函数无法打开这个应用,所以此时我们就可以通过查看该应用的包名和类名来启动它,它的启动信息如下:

Displayed com.android.documentsui/.files.FilesActivity

启动该app的代码如下:

val intent = Intent()
intent.setClassName("com.android.documentsui", "com.android.documentsui.files.FilesActivity")
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(intent)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GBase 8s 产品功能-高可用和ER

GBase 8s 提供了业界领先的高可用集群技术 HAC&#xff0c; SSC&#xff0c; ER&#xff0c; 提供秒级故障 自动切换功能&#xff0c; 使数据库的可用性达到 99.999%&#xff0c; 具备如下特点&#xff1a; 通过不同方案组合&#xff0c; GBase 8s 具有搭建两地三中心、 同城双…

行业内口碑好值得信赖的短网址,让你不再选择恐惧

转眼一年又过去了&#xff0c;最近发现网络上有各种各样的短网址平台&#xff0c;让人眼花缭乱&#xff0c;都声称免费并且功能强大&#xff0c;但是据我的了解&#xff0c;很多免费的短网址都是有使用上的限制的&#xff0c;比如生成条数、访问次数、有广告等等、还有各种各样…

项目中的奇葩需求你都怎么应对?

XX群聊&#xff1a;“项目中的奇葩需求怎么应对&#xff1f;”&#xff08;项目三兄弟加入了群聊&#xff09; 小赵&#xff1a;“无论是啥需求&#xff0c;我都是甲方爸爸至上&#xff0c;尽力满足需求、让客户满意。但每个项目初期我都跟客户处得特别好&#xff0c;项目中期…

音视频同步原理

音视频同步 更多精彩内容 音频系统概述 音频时延payload_delay_ms jitter_delay(neteq)。 在WebRTC中有neteq&#xff0c;所以&#xff0c;音频的卡顿以及卡顿时长都是放在neteq内部进行计算的。 时间戳 时间戳的概念主要有以下几个&#xff1a; ntp时间戳: NTP时间戳是绝…

SPI协议讲解与总结

1.SPI通讯协议 SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线 1.1 SPI引脚与工作过程 SPI的通信原理很简单&#xff0c;它以主从方式工作&#xff0c;这种模式通常有一…

GitHub推送代码时弹出验证框总是登录失败

最近同事准备用GitHub布置个人博客&#xff0c;但是提交代码时总是弹出登录框然后输入我GitHub的账号密码后一直提示报错Logon failed, use ctrlc to cancel basic credential prompt&#xff0c;然后我才知道还有人不知道这个问题 2021年8月13日, github不再支持用密码提交代码…

【Mysql】内外连接

文章目录**1.内连接****2.外连接****3.小结**1.内连接 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询 select 字段 from 表1 inner join 表2 on 连接条件 and 其他条件&#xff1b;案例:…

IPWorks MQ C++ Edition

IPWorks MQ C Edition 在应用程序中轻松实现消息队列(MQ)通信协议。 IPWorks MQ旨在帮助您轻松实现流行的消息传递协议&#xff0c;以便在网络设备之间进行通信。支持许多常见的协议和服务&#xff0c;包括Azure Relay、AMQP、MQTT、STOMP等。 IPWorks MQ功能 完全符合MQTT版本…

普通物理光学:光栅

透射光栅 光栅常数 a&#xff1a;不透光部分的宽度b&#xff1a;透光部分的宽度dab:光栅常数N:缝数k:光谱的级数衍射图像&#xff1a;单缝衍射多缝干涉 光栅的每条狭缝,都将在接收屏幕上的同一位置&#xff0c;产生同样的单缝夫琅禾费衍射图样各条狭缝的衍射光再在接收屏幕上相…

【Vue脚手架项目的结构】

目录 1. 关于VUE Cli 2. 修改VUE Cli项目的端口号 3. Vue脚手架项目的结构 4. 关于标签 5. 关于路由配置 6. 关于视图组件 7. 应用Element UI 1. 关于VUE Cli VUE Cli&#xff1a;Vue脚手架 在Vue脚手架项目中&#xff0c;使用的是“单页面”的设计模式&#xff0c;也就…

CentOS Linux 的安装

CentOS Linux 的安装 作者&#xff1a;Grey 原文地址&#xff1a; 博客园&#xff1a;CentOS Linux 的安装 CSDN&#xff1a;CentOS Linux 的安装 说明 本安装说明是基于 Windows 10 下 VMware workstation 16 安装 Linux&#xff0c;Linux 版本是 CentOS 8&#xff0c;需…

IPWorks IoT Java Edition

IPWorks IoT Java Edition 在应用程序中轻松实现物联网(IoT)通信协议。 IPWorks IoT旨在帮助您轻松实现联网设备之间通信所需的IoT协议。支持许多常见协议&#xff0c;包括AMQP、MQTT、STOMP、CoAP等。它包括不依赖任何外部库的本地软件组件。 IPWorks物联网功能 在所有QoS级别…

新员工webpack打包后上传服务器页面空白

某天同事小白使用了webpack开发vue项目&#xff0c;在项目开发完成后&#xff0c;使用命令&#xff1a;npm run build对项目进行打包后发布服务器页面显示空白 排查后发现&#xff1a;webpack打包的时候引入js时使用的是绝对路径导致的 解决方案如下 修改webpack打包文件中的…

[附源码]JAVA毕业设计婚纱摄影管理(系统+LW)

[附源码]JAVA毕业设计婚纱摄影管理&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&…

【Redis-09】面试题之Redis数据结构与对象-RedisObject(下篇)

承接上篇【Redis-08】面试题之Redis数据结构与对象-RedisObject&#xff08;上篇&#xff09; 8. type-字符串string 8.1 字符串的三种encoding编码&#xff08;int embstr raw&#xff09; 如果保存的是整型&#xff0c;并且可以用long类型标识&#xff08;-9223372036854…

《InnoDB引擎七》InnoDB关键特性-插入缓存

InnoDB 关键特性 InnoDB存储引擎的关键特性包括&#xff1a; Insert Buffer (插入缓冲)Double Write (两次写)Adaptive Hash Index (自适应哈希索引)Async IO (异步IO)Flush Neighbor Page (刷新领接页) 这些特性为InnoDB存储引擎带来了更好的性能以及更高的可靠性。 插入缓冲…

2023年湖北监理工程师考试时间、报名时间、报考条件是什么?

2023年湖北监理工程师考试时间、报名时间、报考条件是什么&#xff1f; 一、2023年湖北监理工程师考试时间&#xff1a; 参考往年的监理工程师考试时间&#xff0c;预计考试时间为5月份。 二、2023年湖北监理工程师报名时间&#xff1a; 2023年湖北监理工程师报名时间预计3月份…

单例模式【JavaEE初阶】

一、单例模式的概念 单例模式是一种常见的设计模式 。单例模式希望&#xff1a;有些对象&#xff0c;在一个程序中应该只有唯一一个实例&#xff0c;就可以使用单例模式 。换句话说&#xff0c;在单例模式下&#xff0c;对象的实例化被限制了&#xff0c;只能创建一个&#xff…

Mybatis源码解析(七):Mapper代理原理

Mybatis源码系列文章 手写源码&#xff08;了解源码整体流程及重要组件&#xff09; Mybatis源码解析(一)&#xff1a;环境搭建 Mybatis源码解析(二)&#xff1a;全局配置文件的解析 Mybatis源码解析(三)&#xff1a;映射配置文件的解析 Mybatis源码解析(四)&#xff1a;s…

使用R语言对S&P500股票指数进行ARIMA + GARCH交易策略

在本文中&#xff0c;我想向您展示如何应用S&#xff06;P500股票市场指数的交易策略。最近我们被客户要求撰写关于交易策略的研究报告&#xff0c;包括一些图形和统计输出。 通过组合ARIMA GARCH模型&#xff0c;从长期来看&#xff0c;我们可以超过“买入并持有”方法。 相…