Это выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class TweetService extends IntentService { String consumerKey = "TwitterConsumerKey" ; String consumerSecret = "TwitterConsumerSecret" ; public TweetService() { super ( "Tweet Service" ); } @Override protected void onHandleIntent(Intent intent) { AccessToken accessToken = createAccessToken(); StatusListener listener = new UserStreamListener() { // override a whole load of methods - removed for brevity public void onStatus(Status status) { String theTweet = status.getText(); // do something with the tweet } } }; ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.setOAuthConsumerKey(consumerKey); configurationBuilder.setOAuthConsumerSecret(consumerSecret); TwitterStream twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance(accessToken); twitterStream.addListener(listener); twitterStream.user(); } } |
Это вызывается из MyActivity так:
1
2
3
4
5
6
7
8
9
|
public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { ... super .onCreate(savedInstanceState); Intent intent = new Intent( this , TweetService. class ); startService(intent); } } |
Я хотел иметь возможность информировать пользовательский интерфейс каждый раз, когда был твит, который содержал ссылку в нем, чтобы ссылка могла отображаться в пользовательском интерфейсе.
Любые другие приложения также могут прослушивать широковещательные сообщения, если они хотят, но в этом случае информация не очень важна, поэтому я думаю, что этот подход вполне подходит.
Сначала мне пришлось изменить сервис, чтобы он выглядел так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
public class TweetTask { public static final String NEW_TWEET = "tweet_task.new_tweet" ; } public class TweetService extends IntentService { String consumerKey = "TwitterConsumerKey" ; String consumerSecret = "TwitterConsumerSecret" ; public TweetService() { super ( "Tweet Service" ); } @Override protected void onHandleIntent(Intent intent) { AccessToken accessToken = createAccessToken(); StatusListener listener = new UserStreamListener() { // override a whole load of methods - removed for brevity public void onStatus(Status status) { String theTweet = status.getText(); Intent tweetMessage = new Intent(TweetTask.NEW_TWEET); tweetMessage.putExtra(android.content.Intent.EXTRA_TEXT, document); sendBroadcast(tweetMessage); } } }; ConfigurationBuilder configurationBuilder = new ConfigurationBuilder(); configurationBuilder.setOAuthConsumerKey(consumerKey); configurationBuilder.setOAuthConsumerSecret(consumerSecret); TwitterStream twitterStream = new TwitterStreamFactory(configurationBuilder.build()).getInstance(accessToken); twitterStream.addListener(listener); twitterStream.user(); } } |
Затем мне пришлось определить следующий код в MyActivity :
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public class MyActivity extends Activity { protected void onResume() { super .onResume(); if (dataUpdateReceiver == null ) dataUpdateReceiver = new DataUpdateReceiver(textExtractionService); IntentFilter intentFilter = new IntentFilter(TweetTask.NEW_TWEET); registerReceiver(dataUpdateReceiver, intentFilter); } protected void onPause() { super .onPause(); if (dataUpdateReceiver != null ) unregisterReceiver(dataUpdateReceiver); } private class DataUpdateReceiver extends BroadcastReceiver { private CachedTextExtractionService textExtractionService; public DataUpdateReceiver(CachedTextExtractionService textExtractionService) { this .textExtractionService = textExtractionService; } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(TweetTask.NEW_TWEET)) { // do something with the tweet } } } } |
Теперь, когда есть твит со ссылкой в нем, мой BroadcastReceiver получает уведомление, и я могу делать с ним все, что захочу.
Это кажется довольно простым решением проблемы, поэтому мне было бы интересно узнать, есть ли другие недостатки, кроме того, который я определил выше.
Ссылка: Изучение Android: Получение сервиса для общения с деятельностью от нашего партнера JCG Марка Нидхэма в блоге Марка Нидхэма .
Статьи по Теме :