2017-04-14 64 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

相關問題