在Android中,如何判断当前是否在桌面上
来源:互联网 发布:淘宝网韩都衣舍旗舰店 编辑:程序博客网 时间:2024/04/29 04:48
在做Android上面的悬浮窗的时候,一般需要去判断一种情况,即当前是否是在桌面上(即按下Home键时回到的手机界面):
1)在桌面上,才展示悬浮窗
2)不在桌面上,则隐藏悬浮窗
桌面(Home),其实本质上也是一个应用程序,也是由Activity组成的,所以一个手机里面有可能装有多个桌面应用,这是第一点。
第二点,要判断当前是否在桌面上,其实也就是要判断当前显示的这个Activity,是不是属于一个桌面应用,所以必须先获取当前应用的包名来判断。
在Android中,可通过以下几个步骤来判断当前是否在桌面上:
1)获取所有桌面应用的包名,可通过PackageManager来实现。
List<String> names = new ArrayList<String>();PackageManager packageManager = this.getPackageManager();Intent intent = new Intent(Intent.ACTION_MAIN);intent.addCategory(Intent.CATEGORY_HOME);List<ResolveInfo> list = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);for(ResolveInfo resolveInfo : list){names.add(resolveInfo.activityInfo.packageName);}桌面应用有可能不只包含一个Activity的,那就要找到的是Intent.ACTION_MAIN所对应的那个Activity,才是启动桌面的第一个Activity,才是我们看到的桌面。其次其对应的的Category必须是CATEGORY_HOME的,不然系统可没法辨别出其是不是桌面应用。
所以要将对应的Intent,传给PackageManager.queryIntentActivities方法,从而获取所有能够解析这个Intent的桌面应用,然后将对应的Activity的包名给拿出来。
ResolveInfo,其实存放的就是的对应的每一个Activity的信息。
2)要获取当前Activity(桌面)的包名,然后判断其是否在第一步所包含的Home Activity列表中。
ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);List<RunningTaskInfo> list = activityManager.getRunningTasks(1);isHome = names.contains(list.get(0).topActivity.getPackageName());
利用ActivityManager获取当前运行的众多Task,然后拿出第一个Task(get(0))中最顶的一个Activity(topActivty),然后判断其包名是否在Names中,如果是,表明当前的确是在某一个桌面(的activity)上面。
3)最后,获取当前Task是需要权限的,所以需要在AndroidManifest.xml中添加权限。
<uses-permission android:name="android.permission.GET_TASKS" />
0 0
- 在Android中,如何判断当前是否在桌面上
- 在android中如何判断当前的apk是否处于运行状态
- Android 如何判断当前代码是否在主线程中执行
- android 判断当前是否在桌面
- android 判断是否在桌面,当前程序是否在运行
- 在Android中如何判断NFC是否启用
- 在Android中如何判断NFC是否启用
- Android中判断当前应用程序是否在运行 推送时进行判断
- 在ognl的PropertyAccessor实现类中如何判断当前Node是否最后一个
- 如何判断一个时间是否在当前的两小时内
- android中如何判断Android手机当前是否联网?
- Android 判断当前介面是否是在桌面
- Android 判断当前点击位置是否在圆的内部
- Android 判断当前是否在WIFI网络下
- html判断当前页面是否在iframe中
- Java判断当前时间是否在时间段中
- 在表格中判断当前日期是否快到期
- java 判断当前运行类是否在jar 中运行
- BSSID/SSID/ESSID的区别和讲解
- 菜鸟Android学习之路24-显示在标题上的进度条
- 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数
- 在Ubuntu12.04上添加Gvim标签打开
- SQL Server的复合索引学习【转载】
- 在Android中,如何判断当前是否在桌面上
- 写在创业304天
- 观“一个垃圾回收器的实现”有感
- 第一天搭建tftp服务器
- 内存泄漏以及常见的解决方法
- VHDL 音乐盒设计
- ORACLE 动态执行SQL语句
- 黑马程序员_面向对象的学习总结
- 每天工作4小时的程序员(关于工作效率的思考)