2010-12-17 112 views
2

我正在構建一個應用程序,用於監聽CallLog.Calls內容提供者中的更改。因此,對此內容提供者的任何更改都會通知應用程序的觀察者,這會插入數據已更改。在CallLog.Calls中監聽更改

但存在一個問題,當應用程序未運行時會通知應用程序,即該應用程序不會捕獲在未運行時發生更改的數據。

所以我的問題是,有沒有一種方法來捕捉應用程序未運行時更改的數據?因此,例如,我撥打了8個電話,並且該應用程序未運行,因此8個新數據已添加到CallLog.calls內容提供商。那麼一旦應用程序啓動,有沒有辦法捕獲這8個新數據?

謝謝!

回答

1

如果在來電時觸發了Intent,則可以讓您的應用通過使用BroadcastReceiver進行響應,並在清單中創建IntentFilter

或者只是查詢供應商當你啓動應用...

編輯:

ACTION_PHONE_STATE_CHANGEDTelephonyManager意圖,你可以監聽並檢查它是否是TelephonyManager.CALL_STATE_RINGING

+0

事實上,我有一個ContentObserver在來電或撥出時觸發。但該應用程序只在運行時偵聽通知。當它沒有運行時,它不聽,所以我所做的電話被應用程序忽略,即應用程序不捕獲數據。得到它了?所以我ḿ尋找一個解決方案,可以檢查或收聽應用程序運行。我試圖查詢提供程序的大小,聲明兩個變量,一個是提供程序的最後一個大小,另一個是當前大小,因此,一旦我運行該應用程序,我就會比較這兩個變量。這是一個好的解決方案嗎? – rogcg 2010-12-17 04:17:58

+0

如果沒有傳入呼叫您可以響應的意圖,然後檢查呼叫數據庫是否有新行似乎完全可以接受我。 雖然我確定有來電Intent。如果您的應用清單中註冊了一個接收方,並且有意圖過濾器指定您的應用將啓動的意圖。可能最好讓你的應用程序在後臺啓動一個服務來處理它。 檢查Intent類和TelephonyManager類,看看是否有意圖。 – techiServices 2010-12-17 04:28:19

+0

我想我必須實施一項服務。 – rogcg 2010-12-17 15:28:01