android 如何判断当前页面是否是桌面

来源:互联网 发布:android webview js 编辑:程序博客网 时间:2024/04/28 12:31

最近在自己的项目中需要用到判断一个应用是否启动的功能。为了扩展一下知识点,就把题目定成了如果判断当前显示是否为桌面。

其实这个过程有三个知识点
    1.如何找出正在运行的任务? Android系统是支持多任务的,找到所有运行的任务是关键。
    2.如何找出当前正在运行的任务?虽然android是多任务的系统,但是同时在前端运行的应用只会有一个。如何找出来呢?
    3.如何找出桌面?因为我们都知道android的桌面是可以定制的。我们怎么知道用户启用的是哪个桌面呢?

带着这些问题我们开始今天的讲解吧。

    1. 找出正在运行的任务。正在运行的任务可能是前台的也可能是后台的。我们不管三七二十一,先找出来再说。
    代码如下:

  1. ActivityManager manager = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);
  2. List<</span>RunningTaskInfo> runningTaskInfos = manager.getRunningTasks(Integer.MAX_VALUE);

    2.找出前台运行的任务。我们找出了所有正在运行的任务,那么前台运行的任务就位于所以任务的最前面。

  1. RunningTaskInfo info = runningTaskInfos.get(0);

    3. 找出桌面。桌面应用(Launcher)的启动页面包含了以下条件:、
        1.action为android.intent.action.MAIN,
        2.category包含android.intent.category.Home
        虽然说android可以定制桌面,但是我们显示桌面的时候,总是显示众多桌面中的一个。所以我判断的逻辑为:
            找出所有的桌面,如果有一个桌面应用在前台运行,则表示桌面显示中。

  1. private List<</span>String> getHomes() {
  2. List<</span>String> packages = new ArrayList<</span>String>();
  3. PackageManager packageManager = ListenService.this.getPackageManager();
  4. Intent intent = new Intent(Intent.ACTION_MAIN);
  5. intent.addCategory(Intent.CATEGORY_HOME);
  6. List<</span>ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
  7. PackageManager.MATCH_DEFAULT_ONLY);
  8. for(ResolveInfo info : resolveInfo){
  9. packages.add(info.activityInfo.packageName);
  10. System.out.println(info.activityInfo.packageName);
  11. }
  12. return packages;
  13. }

    最后我们来看看完整的代码:

  1. public boolean isHome(){
  2. homes = getHomes();
  3. ActivityManager mActivityManager =(ActivityManager)getSystemService(Context.ACTIVITY_SERVICE);
  4. List<</span>RunningTaskInfo> rti = mActivityManager.getRunningTasks(1);
  5. return homes.contains(rti.get(0).topActivity.getPackageName());
  6. }
  7. private List<</span>String> getHomes() {
  8. List<</span>String> packages = new ArrayList<</span>String>();
  9. PackageManager packageManager = ListenService.this.getPackageManager();
  10. Intent intent = new Intent(Intent.ACTION_MAIN);
  11. intent.addCategory(Intent.CATEGORY_HOME);
  12. List<</span>ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent,
  13. PackageManager.MATCH_DEFAULT_ONLY);
  14. for(ResolveInfo info : resolveInfo){
  15. packages.add(info.activityInfo.packageName);
  16. System.out.println(info.activityInfo.packageName);
  17. }
  18. return packages;
  19. }
0 0
原创粉丝点击