2011-11-08 21 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

相關問題