在做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" />


更多相关文章

  1. Android获取手机WiFi IP地址,MAC地址和网关地址程序实例
  2. android解析xml文件的方式之DOM解析
  3. [Android]你不知道的Android进程化(1)--进程信息
  4. android动态加载资源
  5. Android(安卓)进阶——高级UI必知必会之常用的自定义ViewGroup进
  6. android 扫码设备获取扫码回调内容实践
  7. android获取设备分辨率的新方法
  8. 高德地图Android错误码1008、32和7;错误提示invalid_user_scode;返
  9. android浪漫樱花凋零动态壁纸应用源码

随机推荐

  1. Android,App 常用图标尺寸规范
  2. Android(安卓)Material Design :LinearLay
  3. Android查看数据库工具sqlitemanager
  4. Menu
  5. MyEclipse本地搭建Android环境
  6. android混淆
  7. android 实现悬架控制
  8. android中ContactsContract获取联系人的
  9. 移动平台自动化测试从零开始-MonkeyRunner
  10. Android(安卓)3.0系统上 解密GMail动画