在Espresso Android中获取当前活动

56

如果有一个跨越多个活动的测试,有没有一种方法可以获取当前活动?

getActivity() 方法仅提供启动测试时使用的一个活动。

我尝试了下面的代码:

public Activity getCurrentActivity() {
    Activity activity = null;
    ActivityManager am = (ActivityManager) this.getActivity().getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> taskInfo = am.getRunningTasks(1);
    try {
        Class<?> myClass = taskInfo.get(0).topActivity.getClass();
        activity = (Activity) myClass.newInstance();
    }
    catch (Exception e) {

    }
    return activity;
}

但是我得到了一个空对象。


很遗憾,你没有为getActivity()指定类名,否则我会很高兴地获得已启动测试的活动。 - Martin
11个回答

-1

如果您的测试用例中只有一个活动,则可以执行以下操作:

1. 声明测试规则

@Rule
public ActivityTestRule<TestActivity> mActivityTestRule = new ActivityTestRule<>(TestActivity.class);

2. 获取你的Activity

mActivityTestRule.getActivity()

太简单了!


32
从问题中可以看出,"getActivity()方法只返回用于启动测试的一个Activity",而不是"有没有一种方法可以获取当前Activity?",因此您并没有回答问题。 - MateuszL
哦,抱歉 :-) 我只是在谷歌上搜索如何获取一个活动,并找到了这个问题。因为问题没有描述解决方案,所以我创建了一个新的标签页并继续搜索。然后,当我找到解决方案时,我开始关闭标签页。看起来我在这里分享了我的解决方案,没有任何反思。希望这样放在这里不会太糟糕 :-) - Slava

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接