2017-04-14 6 views
2

ご存じのように、アンドロイドはアンドロイドNのMulti-Window support modeを提供しています。私たちのアプリケーションはマルチウィンドウをサポートしています。
しかし、それをテストするには?どのように強制的にそのモードでアプリを実行する?私はInstrumentationクラスまたは他のどこかのドキュメントにそのようなメソッドを作成していません。多分それは何とか可能ですエスプレッソLaunch New Activities in Multi-Window Modeからマルチウィンドウモードで計測されたアクティビティを実行する

答えて

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 

を、2つの回避策があります。

  1. は、私たちは私の避難所「
  2. 入るマルチモード完了を待つためにuiAutomation.waitForIdleを使用することはできませんタスクマネージャーのアプリケーションを選択して、私たちの活動に焦点を当てる方法を見つけました。だから私は、私たちの活動の可能性のある場所についてちょうどタッチイベントを実行します。など

それを実装した後は、エスプレッソといつものように活性を試験することができるでしょう

+0

それを試してみましょう回答。 – azizbekian

+0

@azizbekian ok、とにかくありがとう – Beloo

3

:あなたが新しいアクティビティを起動すると

、あなたは、可能な場合には、新たな活動は、現在の1に隣接して表示しなければならないシステムにヒントすることができます。これを行うには、インテントフラグ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); 
} 

、これはドキュメントに基づいて、私の推測では、それを試していないです。 、それは私には思えますが、あなたは最初「偽」活動を開始する必要があり、かつ、マルチウィンドウモードであっ打ち上げテスト活動からので「新しい活動は1つがそれを起動に隣接して表示されます」 、指定されたIntentフラグでそれを起動する別のアクティビティがあるはずです。

+0

おかげで、私はあなたが私の答えの選択を解除し、正しいとフルとしてあなたをマークすべきだと思う – Beloo

関連する問題