android判断应用是否回到桌面的两种方法
有时候需要判断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判断应用是否回到桌面的两种方法相关推荐
- 【错误记录】NDK 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | Android Studio 配置外部 so 动态库两种方法 )
文章目录 一.报错信息 二.解决方案 ( Android Studio 配置外部 so 动态库两种方法 ) 1.jniLibs 目录存放 2.libs 目录存放 一.报错信息 外部引用 so 动态库 ...
- 计算机桌面变成立体,win7系统将桌面变成立体桌面的两种方法介绍
相信大家都听说过立体桌面,其实立体桌面也叫做3D桌面, win7旗舰版 自带的桌面效果各个界面堆叠在一起的效果,桌面看起来像一个房间,桌面上的东西都可以任意的挂在墙上.一些追求个性化用户觉得系统默认的 ...
- 计算机桌面变成立体,win7系统将桌面变成立体桌面的两种方法
相信大家都听说过立体桌面,其实立体桌面也叫做3D桌面,win7旗舰版自带的桌面效果各个界面堆叠在一起的效果,桌面看起来像一个房间,桌面上的东西都可以任意的挂在墙上.一些追求个性化用户觉得系统默认的桌面 ...
- 将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法
将uni-app打包的H5放在 Android程序中在 webview 显示的两种方法 前言 Hash History 完事 前言 之前有个项目要同时做小程序和APP,本着节省时间的想法,研究了下un ...
- oracle 判断是否位汉字,js判断字符是否是汉字的两种方法小结
有时需要判断一个字符是不是汉字,比如在用户输入含有中英文的内容时,需要判断是否超过规定长度就要用到.用 Javascript 判断通常有两种方法. 1.用正则表达式判断 js判断字符是否是汉字 .co ...
- 判断是否是回文字符串两种方法
判断回文字符串的两种方法 public class JudgingPalindrome {public static void main(String[] args) {solution01();Sy ...
- Android 获取手机中的图片信息的两种方法
1, Android 使用ContentProvider扫描手机中的图片 // 必须在查找前进行全盘的扫描,否则新加入的图片是无法得到显示的(加入对sd卡操作的权限)//todo 仅限于android ...
- android 圆圈扩大动画,Android 实现圆圈扩散水波动画效果两种方法
两种方式实现类似水波扩散效果,先上图为敬 自定义view实现 动画实现 自定义view实现 思路分析:通过canvas画圆,每次改变圆半径和透明度,当半径达到一定程度,再次从中心开始绘圆,达到不同层级 ...
- android保存连接地址到桌面快捷方式,Android创建桌面快捷方式两种方法
谈谈在桌面上直接生成.个人觉得这个比较爽快,既然都是快捷方式了干嘛还要再隐藏一层呢?当然喜欢桌面干净的就比较喜欢第二个了. 第一个是通过广播(Broadcast)的形式向Luncher发送请求生成快捷 ...
最新文章
- go 判断元素是否在slice_Go内置数据结构原理
- printf函数与主函数问题
- Content Provider 基础 之URI
- php数据库--mysql优化
- 领会CSS,实际中的研究
- SQL 高效的万能分页存储过程
- sql server 内存_SQL Server内存性能指标–第6部分–其他内存指标
- 算法优化策略之“中途相遇”算法思想
- 2.UML2 软件建模入门与提高 --- UML入门基础
- 全民居家都带不动的AI健身,到底是不是伪命题?
- Android Base64编码解码
- [易飞]指定日期结存
- minitools在win10上安装失败
- Linux环境变量PSI指什么,psi是什么单位,pSI指标应用原则
- 真实场景的双目立体匹配(Stereo Matching)获取深度图详解
- LaTeX Error: File `citesort.sty' not found.
- 【SQL】查找最新一条数据
- 【038】MySQL中varchar与char的区别以及varchar(50)中的50代表的涵义?
- C语言003:郑州轻工业大学在线测评题目
- 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事