android 5.0(↑)获取最近运行的一个应用的包名

2024-06-15 13:32

本文主要是介绍android 5.0(↑)获取最近运行的一个应用的包名,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们用了api21的小朋友就知道啦,当你用下面的代码的时候,它会提示你过时啦,而且为了安全考虑,这里不能直接获取到最近运行的应用程序的信息啦

// 获取到activity的管理的类
android.app.ActivityManager m = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
// 获取最近的一个运行的任务的信息
List<RunningTaskInfo> tasks = m.getRunningTasks(1);


所以这时候就要去看看系统中是如果实现的,这里就不带你们看源代码了,我就直接告诉你们啦,我们需要通过反射获取到

类RunningAppProcessInfo中的一个私有的字段:"processState",然后获取所有的正在运行的进程应用,从每一个进程信息中获取这个字段的数值,如果数值是2就表示这个应用信息是最近运行的应用,完整代码如下:

/*** 有关系统的工具类* * @author cxj**/
public class SystemUtil {/*** 获取app的名称* * @param context* @return*/public static String getAppName(Context context) {return context.getApplicationInfo().loadLabel(context.getPackageManager()) + "";}/*** 这个方法获取最近运行任何中最上面的一个应用的包名,<br>* 进行了api版本的判断,然后利用不同的方法获取包名,具有兼容性* * @param context*            上下文对象* @return 返回包名,如果出现异常或者获取失败返回""*/public static String getTopAppInfoPackageName(Context context) {if (SystemInfo.apiVersion < 21) { // 如果版本低于22// 获取到activity的管理的类ActivityManager m = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);// 获取最近的一个运行的任务的信息List<RunningTaskInfo> tasks = m.getRunningTasks(1);if (tasks != null && tasks.size() > 0) { // 如果集合不是空的// 返回任务栈中最上面的一个RunningTaskInfo info = m.getRunningTasks(1).get(0);// 获取到应用的包名// String packageName =// info.topActivity.getPackageName();return info.baseActivity.getPackageName();} else {return "";}} else {final int PROCESS_STATE_TOP = 2;try {// 获取正在运行的进程应用的信息实体中的一个字段,通过反射获取出来Field processStateField = ActivityManager.RunningAppProcessInfo.class.getDeclaredField("processState");// 获取所有的正在运行的进程应用信息实体对象List<ActivityManager.RunningAppProcessInfo> processes = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getRunningAppProcesses();// 循环所有的进程,检测某一个进程的状态是最上面,也是就最近运行的一个应用的状态的时候,就返回这个应用的包名for (ActivityManager.RunningAppProcessInfo process : processes) {if (process.importance <= ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND&& process.importanceReasonCode == 0) {int state = processStateField.getInt(process);if (state == PROCESS_STATE_TOP) { // 如果这个实体对象的状态为最近的运行应用String[] packname = process.pkgList;// 返回应用的包名return packname[0];}}}} catch (Exception e) {}return "";}}
}


下面这个是辅助类:

/*** 有关系统的一些信息* * @author Administrator**/
public class SystemInfo {/*** api的版本,返回一个整形的数值*/public static final int apiVersion = Build.VERSION.SDK_INT;}



兼容了低版本.测试环境api22及以下版本的android环境

demo下载

这篇关于android 5.0(↑)获取最近运行的一个应用的包名的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1063586

相关文章

Python运行中频繁出现Restart提示的解决办法

《Python运行中频繁出现Restart提示的解决办法》在编程的世界里,遇到各种奇怪的问题是家常便饭,但是,当你的Python程序在运行过程中频繁出现“Restart”提示时,这可能不仅仅是令人头疼... 目录问题描述代码示例无限循环递归调用内存泄漏解决方案1. 检查代码逻辑无限循环递归调用内存泄漏2.

如何解决idea的Module:‘:app‘platform‘android-32‘not found.问题

《如何解决idea的Module:‘:app‘platform‘android-32‘notfound.问题》:本文主要介绍如何解决idea的Module:‘:app‘platform‘andr... 目录idea的Module:‘:app‘pwww.chinasem.cnlatform‘android-32

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

SpringShell命令行之交互式Shell应用开发方式

《SpringShell命令行之交互式Shell应用开发方式》本文将深入探讨SpringShell的核心特性、实现方式及应用场景,帮助开发者掌握这一强大工具,具有很好的参考价值,希望对大家有所帮助,如... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定

SpringBoot应用中出现的Full GC问题的场景与解决

《SpringBoot应用中出现的FullGC问题的场景与解决》这篇文章主要为大家详细介绍了SpringBoot应用中出现的FullGC问题的场景与解决方法,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录Full GC的原理与触发条件原理触发条件对Spring Boot应用的影响示例代码优化建议结论F

MySQL 分区与分库分表策略应用小结

《MySQL分区与分库分表策略应用小结》在大数据量、复杂查询和高并发的应用场景下,单一数据库往往难以满足性能和扩展性的要求,本文将详细介绍这两种策略的基本概念、实现方法及优缺点,并通过实际案例展示如... 目录mysql 分区与分库分表策略1. 数据库水平拆分的背景2. MySQL 分区策略2.1 分区概念

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下: