如何检查代码是否主屏幕在Android(所有设备)中都是焦点?

时间:2015-08-04 06:37:40

标签: android android-5.0-lollipop homescreen

我正在尝试在主屏幕中显示浮动图标。我使用以下代码:

        List<RunningTaskInfo> runningtasks = actvityManager.getRunningTasks(1);

        Intent intent = new Intent(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_HOME);
        List<ResolveInfo> resolveInfoList = getPackageManager().queryIntentActivities(intent,
                PackageManager.MATCH_DEFAULT_ONLY);
        String topmostapp = runningtasks.get(0).topActivity.getPackageName();

这适用于Lollipop版本以下的设备。

对于Lollipop,我正在尝试使用以下代码:

          for(RunningAppProcessInfo appProcess : appProcesses) {
          if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                if ((appProcess.processName.contains("launcher"))) {
                //Sets the condition.
                }

代码中的问题是,只有当主屏幕包具有像Samasung设备这样的“启动器”字样时才能正常工作。但在Moto G等设备中,包名称不同(“com.google.android.googlequicksearchbox”)。

所以,我想知道是否有任何公共代码来检测主屏幕是否在焦点而不管设备是什么?

提前致谢。

1 个答案:

答案 0 :(得分:2)

我找到了解决上述问题的方法。我使用硬编码包名称比较删除了检查,而是检查主屏幕包名称并将该字符串与顶级应用程序进程名称进行比较。如果匹配,我显示托盘图标。此代码仅适用于Lollipop及以上版本。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

        PackageManager localPackageManager = getPackageManager();
        Intent checkHomeInLollipopIntent = new Intent(Intent.ACTION_MAIN);
        checkHomeInLollipopIntent.addCategory(Intent.CATEGORY_HOME);
        String str = localPackageManager.resolveActivity(
                checkHomeInLollipopIntent,
                PackageManager.MATCH_DEFAULT_ONLY).activityInfo.packageName;

        ActivityManager activityManager = (ActivityManager) this
                .getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> appProcesses = activityManager
                .getRunningAppProcesses();

        for (RunningAppProcessInfo appProcess : appProcesses) {
            if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                if ((appProcess.processName.equalsIgnoreCase(str))) {
                    bHomeScreen = true;
                }

            }
        }