Instrumentation.ActivityMonitor不监控Intent.ACTION_CALL

时间:2012-05-28 11:47:19

标签: android unit-testing junit

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

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); 
}

虽然调用了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 }

请帮忙

我能找到的唯一其他资源是android开发者组的this discussion which ended without any solution

2 个答案:

答案 0 :(得分:3)

我认为有同样的问题。后来我发现我的活动监视器没有工作,因为robotium注册了它自己的监视器,它总是命中,阻止包括我在内的任何其他监视器。

答案 1 :(得分: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);
    }