如何在android中找到当前的前台活动

Sha*_*sha 8 android android-activity

是否有可能在android中找到当前的前台活动.我没有使用ActivityGroup.

bri*_*tey 8

我的猜测是你需要查看ActivityManager类.我简要地看了一下这些文档,这就是我想出来的.

有一个功能:

public List<ActivityManager.RunningTaskInfo> getRunningTasks (int maxNum)
Run Code Online (Sandbox Code Playgroud)

来自Android文档:

返回当前正在运行的任务列表,其中最新的是第一个和更早的任务.请注意,"运行"并不意味着任何任务的代码当前已加载或活动 - 该任务可能已被系统冻结,因此可以在下次将其置于前台时以其先前状态重新启动.

我的想法是,如果你传入maxNum=1,它应该给你最近的任务,即.最重要的任务.每个ActivityManager.RunningTaskInfo都有一个叫做的属性topActivity.

public ComponentName topActivity 
Run Code Online (Sandbox Code Playgroud)

来自Android文档:活动组件位于任务历史堆栈的顶部.这是用户目前正在做的事情.


Din*_*ati 7

尝试下面的代码:你需要给予适当的许可

private String getCurrentTopActivity() {

        ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> RunningTask = mActivityManager.getRunningTasks(1);
        ActivityManager.RunningTaskInfo ar = RunningTask.get(0);
        return ar.topActivity.getClassName().toString();
    }
Run Code Online (Sandbox Code Playgroud)

  • 所以在Docs中我看到一个很大的警告:注意:此方法仅用于调试和呈现任务管理用户界面.这绝不应该用于应用程序中的核心逻辑,例如根据此处的信息在不同的行为之间进行决策.不支持此类用途,并且将来可能会破坏.例如,如果多个应用程序可以同时主动运行,则出于控制流程的目的而对此处的数据含义进行的假设将是不正确的. - 这个maen我真的不应该使用这个代码吗? (7认同)