Instrumentation.ActivityMonitor不监控Intent.ACTION_CALL

vKa*_*yap 5 junit android unit-testing

我有一个简单的测试用例,用于测试是否在按钮点击时启动了拨出呼叫.

public void testCalling(){
    IntentFilter callFilter = new IntentFilter();
    callFilter.addAction(Intent.ACTION_CALL);
    callFilter.addCategory(Intent.CATEGORY_DEFAULT);
    callFilter.addDataScheme("tel:");
    ActivityMonitor mMonitor = new ActivityMonitor(callFilter, null, false);
    getInstrumentation().addMonitor(mMonitor);

    mSolo.clickOnText("CALL");

    assertTrue(0 < mMonitor.getHits());
    sendKeys(KeyEvent.KEYCODE_ENDCALL); 
}
Run Code Online (Sandbox Code Playgroud)

虽然调用了Intent(传出调用),但我的ActivityMonitor无法注册它.堆栈跟踪是

05-28 17:11:09.183: I/ActivityManager(71): Starting activity: Intent { act=android.intent.action.CALL dat=tel:+xxxxxxx cmp=com.android.phone/.OutgoingCallBroadcaster }
Run Code Online (Sandbox Code Playgroud)

请帮忙

我能找到的唯一其他资源就是这个讨论在Android开发者小组没有任何解决方案的情况下结束

小智 1

在遇到同样的问题并玩了一下之后,我让它工作了。

把“tel”的冒号去掉。然后你的显示器上应该会出现一个点击。

    public void testMakeCall(){
        IntentFilter filter = new IntentFilter(Intent.ACTION_CALL);
        filter.addCategory(Intent.CATEGORY_DEFAULT);
        filter.addDataScheme("tel");

        ActivityMonitor activityMonitor = getInstrumentation().addMonitor(filter, null, false);

        makeCall();

        assertTrue(activityMonitor.getHits() == 1);
    }
Run Code Online (Sandbox Code Playgroud)