有时候需要判断APP是否被切换到后台,然后做相应处理,如显示悬浮窗等。怎么判断呢,有两种方法:

第一种:

    /*** 判断当前界面是否是桌面*/private boolean isHome() {String packageName = getTopApp(this);return getHomes().contains(packageName);}private String getTopApp(Context context) {//android5.0以上只能使用该方式if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {UsageStatsManager m = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE);if (m != null) {long now = System.currentTimeMillis();//获取一小时之内的应用数据List<UsageStats> stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000 * 60, now);String topActivity = "";//取得最近运行的一个app,即当前运行的appif ((stats != null) && (!stats.isEmpty())) {int j = 0;for (int i = 0; i < stats.size(); i++) {if (stats.get(i).getLastTimeUsed() > stats.get(j).getLastTimeUsed()) {j = i;}}topActivity = stats.get(j).getPackageName();}return topActivity;}} else {//android5.0以下可以获取所有运行程序的包名ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);List<ActivityManager.RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);return rti.get(0).topActivity.getPackageName();}return null;}/*** 获得属于桌面的应用的应用包名称** @return 返回包含所有包名的字符串列表*/private List<String> getHomes() {List<String> names = new ArrayList<String>();PackageManager packageManager = this.getPackageManager();Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);for (ResolveInfo ri : resolveInfo) {names.add(ri.activityInfo.packageName);}return names;}

注释应该比较清楚了,当然,如果用这个方法,需要用一个service不断监听,比较浪费性能。

第二种:

在Application初始化时调用registerActivityLifecycleCallbacks监听activity的状态,非常简单吧:

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {@Overridepublic void onActivityCreated(Activity activity, Bundle savedInstanceState) {}@Overridepublic void onActivityStarted(Activity activity) {}@Overridepublic void onActivityResumed(Activity activity) {}@Overridepublic void onActivityPaused(Activity activity) {}@Overridepublic void onActivityStopped(Activity activity) {}@Overridepublic void onActivitySaveInstanceState(Activity activity, Bundle outState) {}@Overridepublic void onActivityDestroyed(Activity activity) {}});

android判断应用是否回到桌面的两种方法相关推荐

  1. 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )

    文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...

  2. 计算机桌面变成立体,win7系统将桌面变成立体桌面的两种方法介绍

    相信大家都听说过立体桌面,其实立体桌面也叫做3D桌面, win7旗舰版 自带的桌面效果各个界面堆叠在一起的效果,桌面看起来像一个房间,桌面上的东西都可以任意的挂在墙上.一些追求个性化用户觉得系统默认的 ...

  3. 计算机桌面变成立体,win7系统将桌面变成立体桌面的两种方法

    相信大家都听说过立体桌面,其实立体桌面也叫做3D桌面,win7旗舰版自带的桌面效果各个界面堆叠在一起的效果,桌面看起来像一个房间,桌面上的东西都可以任意的挂在墙上.一些追求个性化用户觉得系统默认的桌面 ...

  4. 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法

    将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...

  5. oracle 判断是否位汉字,js判断字符是否是汉字的两种方法小结

    有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 1.用正则表达式判断 js判断字符是否是汉字 .co ...

  6. 判断是否是回文字符串两种方法

    判断回文字符串的两种方法 public class JudgingPalindrome {public static void main(String[] args) {solution01();Sy ...

  7. Android 获取手机中的图片信息的两种方法

    1, Android 使用ContentProvider扫描手机中的图片 // 必须在查找前进行全盘的扫描,否则新加入的图片是无法得到显示的(加入对sd卡操作的权限)//todo 仅限于android ...

  8. android 圆圈扩大动画,Android 实现圆圈扩散水波动画效果两种方法

    两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 思路分析:通过canvas画圆,每次改变圆半径和透明度,当半径达到一定程度,再次从中心开始绘圆,达到不同层级 ...

  9. android保存连接地址到桌面快捷方式,Android创建桌面快捷方式两种方法

    谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还要再隐藏一层呢?当然喜欢桌面干净的就比较喜欢第二个了. 第一个是通过广播(Broadcast)的形式向Luncher发送请求生成快捷 ...

最新文章

  1. go 判断元素是否在slice_Go内置数据结构原理
  2. printf函数与主函数问题
  3. Content Provider 基础 之URI
  4. php数据库--mysql优化
  5. 领会CSS,实际中的研究
  6. SQL 高效的万能分页存储过程
  7. sql server 内存_SQL Server内存性能指标–第6部分–其他内存指标
  8. 算法优化策略之“中途相遇”算法思想
  9. 2.UML2 软件建模入门与提高 --- UML入门基础
  10. 全民居家都带不动的AI健身,到底是不是伪命题?
  11. Android Base64编码解码
  12. [易飞]指定日期结存
  13. minitools在win10上安装失败
  14. Linux环境变量PSI指什么,psi是什么单位,pSI指标应用原则
  15. 真实场景的双目立体匹配(Stereo Matching)获取深度图详解
  16. LaTeX Error: File `citesort.sty' not found.
  17. 【SQL】查找最新一条数据
  18. 【038】MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
  19. C语言003:郑州轻工业大学在线测评题目
  20. 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事

热门文章

  1. PHP微信公众号网页授权登录 扫码登录 获取用户基本信息
  2. ECharts 示例——双Y轴
  3. 艺赛旗(RPA)国家企业信用信息公示系统验证码破解(二)
  4. 冰蝎v4.0已经更新,在Java18下也能启动冰蝎。
  5. 《AutoCAD 2014中文版超级学习手册》——第2章 图层设置 2.1 设置图层
  6. Apache Spark 3.0 DStreams-Streaming编程指南
  7. IDEA配置文件乱码
  8. 二进制和十进制怎么互转
  9. 操作系统——PV操作
  10. 10个知识学习app,开始武装自己的大脑吧!