2017-04-14 20 views

回答

2

不幸的是,provided by azizbekian需要一个以前在多窗口模式下加载的应用程序,所以我想提供自己的解决方案。在answer我发现了如何以编程方式进入多窗口模式。使用它,我建立了完整的解决方案:

UiAutomation uiAutomation = InstrumentationRegistry.getInstrumentation().getUiAutomation(); 
    //enter multi-window mode 
    uiAutomation.performGlobalAction(AccessibilityService.GLOBAL_ACTION_TOGGLE_SPLIT_SCREEN); 
    //wait for completion, unfortunately waitForIdle doesn't applicable here 
    Thread.sleep(1000); 
    //simulate selection of our activity 
    MotionEvent motionDown = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_DOWN, 
      150, 200, 0); 
    motionDown.setSource(InputDevice.SOURCE_TOUCHSCREEN); 
    uiAutomation.injectInputEvent(motionDown, true); 
    motionDown.recycle(); 
    MotionEvent motionUp = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), KeyEvent.ACTION_UP, 
      150, 200, 0); 
    motionUp.setSource(InputDevice.SOURCE_TOUCHSCREEN); 
    uiAutomation.injectInputEvent(motionUp, true); 
    motionUp.recycle(); 
    //perform test actions below 

正如你所看到的,有两种解决方法:

  1. 我们不能用uiAutomation.waitForIdle等待进入多模完成
  2. 我的天堂” t找到了一种在任务管理器中选择应用程序以请求关注我们的活动的方法。所以我只是对我们活动的可能位置进行一些触摸事件。

实现它之后,你就可以

+0

我想你应该不选择我的答案和标记你的正确和完整的回答。 – azizbekian

+0

@azizbekian好,但无论如何感谢 – Beloo

3

Launch New Activities in Multi-Window Mode

当您启动一个新的活动,你可以暗示,新的活动应尽可能相邻显示当前的系统。为此,请使用意向标记FLAG_ACTIVITY_LAUNCH_ADJACENT

Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT文档:

该标志仅在分屏多窗口模式下使用。新活动将显示在启动该活动的旁边。这只能与FLAG_ACTIVITY_NEW_TASK一起使用。另外,如果您希望创建现有活动的新实例,则需要设置FLAG_ACTIVITY_MULTIPLE_TASK

如图here如何在测试开始的活动:

@Test 
public void customIntentToStartActivity() { 
    Intent intent = new Intent(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT) 
       | Intent.FLAG_ACTIVITY_NEW_TASK); 
    mActivity = mActivityRule.launchActivity(intent); 
} 

注意,这是我基于文档的猜测,还没有尝试过。虽然,在我看来,您必须先启动一个“假”活动,然后从此处开始在多窗口模式下测试活动,因为“新活动将显示在旁边 ,所以应该有另一个活动,以指定的Intent标志启动它。

+0

由于测试活动像往常一样与咖啡等等,我来试试, – Beloo

相关问题