2011-11-08 19 views
0

我想监视如果startService(...)呼叫正处于活动取得:Service Intent - 它会被ActivityMonitor捕获吗?

public void testShouldCallServiceOnSendButtonPress() throws Exception { 
     assertNotNull(activity.pictureToSend); 
     ActivityMonitor androidMock = help.mockIntent(1); 
     TouchUtils.clickView(this, activity.sendButton); 
     help.assertBehavior(androidMock); 
    } 

    public ActivityMonitor mockIntent(int numberOfExpectedIntentsSentToAndroid) { 
     this.numberOfExpectedIntentsSentToAndroid = numberOfExpectedIntentsSentToAndroid; 
     IntentFilter intentFilter = null; 
     return androidMock = instrumentation.addMonitor(intentFilter, null, true);// catch all 
    } 

上面我加入一个包罗万象的监视器(应该抓住这两个活动和服务意图,对不对? !)

assertNotNull(this.startService(new Intent(this, MyService.class))); 

上面我验证服务是否已成功启动,并且是。

可是......包罗万象的显示器从不打,instrumentation.checkMonitorHit()不是> = 1

任何想法,为什么?

+0

是否有可能代码嘲笑你? ;)尽管如此,你是否尝试过监视特定的活动?如果您遇到了更普遍的问题,或者这是一个简单的错误修正,这可能会给您一个想法。 – Codeman

+0

它嘲笑我所有的时间:),是的,当测试意向MediaStore.ActionImageCapture beeing抛出,监视器工作,所以... 问题转述:ActivityMonitors应该为服务以及活动,工作,对吗? – user77115

回答

1

看看Android源代码,似乎只有Activity.startActivity被调用Instrumentation覆盖。 startService在Activity中未被覆盖,因此它使用Context中的默认实现,所以它永远不会通过该工具。

因此不,ActivityMonitor不会捕获服务意图。

+0

感谢您挖掘源代码......您偶然偶然发现了一个ServiceMonitor :-)? – user77115

+0

如果您安装[Android源代码Eclipse插件](http://code.google.com/p/adt-addons/),那么查看源代码实际上非常容易。 我发现它更容易按Ctrl +点击一种方法,并检查来源,而不是查看文档。 不幸的是,我还没有看到任何方式来获得服务处理。 也许,如果你可以提供你自己的应用程序模拟与startService覆盖,然后启动服务使用getApplication()。startService? – d4n3

相关问题