java - 如何获取前台应用程序和/或 Activity ?

标签 java android

我正在开发用于集成 Android TV 设备和 Smartthings Hub 的 Remote 。我希望能够看到哪个应用处于 Activity 状态(前景,显示给用户)。

我的应用是软键盘,因此它作为服务运行(输入法服务)

我找到了下面的代码并试了一下:

ActivityManager.RunningAppProcessInfo result=null;
String pname="process: ";
ActivityManager activityManager = (ActivityManager) ctx.getSystemService( Context.ACTIVITY_SERVICE );
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();

Iterator <ActivityManager.RunningAppProcessInfo> i = appProcesses.iterator();

while(i.hasNext()){
    ActivityManager.RunningAppProcessInfo info = i.next();
    Log.d("LOG : " , info.processName);

    if(info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND)
    {
         result=info;
         break;
    }
}

但它不显示任何应用程序。如果我删除条件

"info.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND"

然后它将我的应用程序(键盘)显示为正在运行的应用程序。

所以这似乎只显示属于我的应用程序一部分的应用程序或 Activity 。我怎样才能获得整个 Android 系统的这些信息? 是否需要许可?

如果普通应用程序无法做到这一点,并且只能通过一些额外的权限或辅助功能来实现,我愿意使用它,因为该应用程序不是商业应用程序,如果有任何其他 Smartthings 则不会分发用户不要求它。 我只是不能使用 Root设备。除此之外,我可以尝试任何东西。

最佳答案

试试这个:

public static boolean isAppStatus(Context context) {
    boolean isAppStatus = true;
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    if (Build.VERSION.SDK_INT > Build.VERSION_CODES.KITKAT_WATCH) {
        List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses();
        for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) {
            if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND) {
                for (String activeProcess : processInfo.pkgList) {
                    if (activeProcess.equals(context.getPackageName())) {
                        isAppStatus = false;
                    }
                }
            }
        }
    } else {
        List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
        ComponentName componentInfo = taskInfo.get(0).topActivity;
        if (componentInfo.getPackageName().equals(context.getPackageName())) {
            isAppStatus = false;
        }
    }
    return isAppStatus;
}

关于java - 如何获取前台应用程序和/或 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56404933/

相关文章:

Android Camera Intent 创建两个文件

java - iReport 4.6.0 中的空白(白色)文本字段

java - 最佳编程环境

java - 我的程序 Android 中出现 NullPointerException

java - GSSAPI:安全上下文循环

android - Gradle 任务失败 - 无效的 depfile

java - Android 通知设置期间 Toast 消息显示两次

android Camera2 API + 用于在相机预览上绘制的 TextureView 覆盖

Android 抽屉导航保持突出显示

android - 缓存目录不存在