博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android判断应用是否回到桌面的两种方法
阅读量:3976 次
发布时间:2019-05-24

本文共 3061 字,大约阅读时间需要 10 分钟。

有时候需要判断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
stats = m.queryUsageStats(UsageStatsManager.INTERVAL_BEST, now - 60 * 1000 * 60, now); String topActivity = ""; //取得最近运行的一个app,即当前运行的app if ((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
rti = mActivityManager.getRunningTasks(1); return rti.get(0).topActivity.getPackageName(); } return null; } /** * 获得属于桌面的应用的应用包名称 * * @return 返回包含所有包名的字符串列表 */ private List
getHomes() { List
names = new ArrayList
(); PackageManager packageManager = this.getPackageManager(); Intent intent = new Intent(Intent.ACTION_MAIN); intent.addCategory(Intent.CATEGORY_HOME); List
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() {            @Override            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {            }            @Override            public void onActivityStarted(Activity activity) {            }            @Override            public void onActivityResumed(Activity activity) {            }            @Override            public void onActivityPaused(Activity activity) {            }            @Override            public void onActivityStopped(Activity activity) {            }            @Override            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {            }            @Override            public void onActivityDestroyed(Activity activity) {            }        });

转载地址:http://porki.baihongyu.com/

你可能感兴趣的文章
shell操作mysql
查看>>
netcat
查看>>
Linux下如何查看CPU信息, 包括位数和多核信息
查看>>
Linux命令行访问网页
查看>>
VMware网络连接 桥接、NAt、host-only模式
查看>>
VMware网络设置详解 打造超级虚拟网络
查看>>
关于MYSQL Error:ERROR 1005 (HY000) at line 3: Can't create table '.\xx.frm'错误
查看>>
linux命令行获取机器的物理地址并打印及Linux获取系统信息的常用命令
查看>>
解决在CentOS 5.5 yum源下载慢的办法即修改yum源
查看>>
PHP中exec、system等函数调用linux命令问题
查看>>
httpd.conf文件配置详解
查看>>
php shell_exec()与反撇号等价输出结果
查看>>
chmod 命令,主要是+s的选项
查看>>
linux 里命令ls -l 后,文件类型权限后面的数字什么意思
查看>>
Vmware无法登陆Web Interface的解决
查看>>
软件版本常识和软件版本号命名规则
查看>>
shell判断文件是否存在
查看>>
解决FCKeditor在线文本编辑器自动过滤HTML标签的方法
查看>>
Centos 时间同步
查看>>
linux中用shell获取昨天、明天或多天前的日期
查看>>