2012-03-12 34 views
0

我想創建一個服務,我可以註冊。該服務將廣播不同「類型」的消息,並且每個應用程序可以註冊自己以接收不同類型的消息。廣播不同消息類型的服務

例如:

我想寫一個servive讀取一些用戶和廣播的系統標籤的Twitter信息。 然後消費者可以註冊僅接收標籤「foo」的消息,並接收推文消息。 另一個消費者可以註冊只接收標籤「酒吧」的消息,並接收推文消息。

讓我們假設我知道如何構建服務。我的第一個想法是隻播放一些內容,然後在應用中對其進行過濾。但是我對這個解決方案並不滿意。我知道有一些android服務與我想要的類似,但我沒有在網上找到有關如何實現這一點的參考資料。


一些RTFM我所做的是:

主要問題是,互聯網上的大多數文檔都是關於我打電話給該服務的,而不是致電給我的服務。

+0

BTW:更好的標題這個問題將授予您免費重新加載「DuckDuckGo」的主頁:) – elcuco 2012-03-12 14:38:41

+0

你應該看看[Intents and intent broadcasts](http://developer.android.com/guide/topics/intents/intents-filters.html),如何發送它們*(在這種情況下來自服務)*以及如何使用[BroadcastReceiver]接收它們(http://developer.android.com/reference/android/content/BroadcastRecei ver.html)。這是一個非常重要的android概念。或者查看[ContentProviders](http://developer.android.com/guide/topics/providers/content-providers.html)。他們也應該在這裏有用,但我對這些我自己還沒有做太多的工作,所以拿一點鹽就好了。 :) – 2012-03-12 14:46:35

+0

@alextsc所以你告訴我創建一個消息到服務,並且服務將通過意圖與「我」聯繫?這是我的選擇之一。讓它成爲完整的答案,以便我可以+1。編輯:好吧,我的意圖對我來說太慢了。我需要更快的東西。 – elcuco 2012-03-12 14:53:48

回答

0

假設你在談論Service.sendBroadcast(Intent):你可以播出你想要的任何東西,但在某些時候它會變得不切實際。你甚至可以爲每個Twitter標籤定義一個新的Action,但這會很複雜。 您可以在這裏使用意圖的數據部分,接收的代碼可以像過濾廣播:

IntentFilter ifilter = new IntentFilter("com.your.package.ACTION_TWITTER_MSG"); 
    ifilter.addDataScheme("twitter"); 
    ifilter.addDataAuthority("com.your.package", null); 
    ifilter.addDataPath("/foo", PatternMatcher.PATTERN_PREFIX); 

和你一樣,向他們發送:

Intent intent = new Intent("com.your.package.ACTION_TWITTER_MSG"); 
    intent.setData(Uri.parse("twitter://com.your.package/foo")); 
    context.sendBroadcast(intent);