지난번 최종 소스를 올렸지만 정작 중요한 이미지 업로드 기능이 빠져 있으므로 이번에 추가하였습니다.
트윗픽을 연동하여 올리는 것이 아닌 순수 트위터만의 API를 이용하여 전송하는 예제 입니다.
1: package com.coolsharp.test;
2:
3: import java.io.File;
4: import java.util.List;
5:
6: import twitter4j.Paging;
7: import twitter4j.Status;
8: import twitter4j.Twitter;
9: import twitter4j.TwitterException;
10: import twitter4j.TwitterFactory;
11: import twitter4j.auth.AccessToken;
12: import twitter4j.auth.RequestToken;
13: import twitter4j.conf.Configuration;
14: import twitter4j.conf.ConfigurationBuilder;
15: import twitter4j.media.ImageUpload;
16: import twitter4j.media.ImageUploadFactory;
17: import android.app.Activity;
18: import android.content.Intent;
19: import android.net.Uri;
20: import android.os.Bundle;
21: import android.util.Log;
22: import android.view.View;
23: import android.widget.Button;
24:
25: /**
26: * @author coolsharp
27: *
28: */
29: public class TwitterApp extends Activity {
30:
31: /**
32: * Twitter instance object
33: */
34: private Twitter twitter;
35: private AccessToken acToken = null;
36: private RequestToken rqToken = null;
37: private Status status = null;
38: String access_token = "";
39: String access_token_secret = "";
40:
41: private static final String CONSUMER_KEY = "";
42: private static final String CONSUMER_SECRET = "";
43: private static final String ACCESS_TOKEN = "ACCESS_TOKEN";
44: private static final String ACCESS_TOKEN_SECRET = "ACCESS_TOKEN_SECRET";
45: public static Uri CALLBACK_URL = Uri.parse("wefu://twitter");
46:
47: /** 생성. */
48: @Override
49: public void onCreate(Bundle savedInstanceState) {
50: super.onCreate(savedInstanceState);
51: setContentView(R.layout.main);
52:
53: // 트위터 인스턴스 얻기
54: twitter = new TwitterFactory().getInstance();
55: // 컨슈머 키 대입
56: twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
57:
58: // 버튼 리스너 등록
59: Button btn = (Button) findViewById(R.id.btnAuthorize);
60: btn.setOnClickListener(new Button.OnClickListener() {
61: public void onClick(View v) {
62: try {
63: File file = new File("/sdcard/test.jpg");
64: if (file.exists())
65: writePicTwitter("test", file);
66: // if (null != acToken) getList();
67: } catch (TwitterException e) {
68: // TODO Auto-generated catch block
69: e.printStackTrace();
70: } // 토큰 발행
71: }
72: });
73: }
74:
75: /**
76: * 트위터 글 쓰기
77: * @return
78: * @throws TwitterException
79: */
80: private boolean writeTwitter(String content) throws TwitterException {
81: boolean res = false;
82:
83: getToken(); // 토큰 읽기
84:
85: if (null != acToken) {
86: // 트위터 글쓰기
87: // SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
88: // dateFormat.format(new Date(System.currentTimeMillis())).toString();
89: status = twitter.updateStatus(content);
90: }
91:
92: return res;
93: }
94:
95: /**
96: * 트위터 글 쓰기
97: * @return
98: * @throws TwitterException
99: */
100: private boolean writePicTwitter(String content, File file) throws TwitterException {
101: boolean res = false;
102:
103: getToken(); // 토큰 읽기
104:
105: if (null != acToken) {
106: ConfigurationBuilder builder = new ConfigurationBuilder();
107: builder.setOAuthConsumerKey(CONSUMER_KEY);
108: builder.setOAuthConsumerSecret(CONSUMER_SECRET);
109: builder.setOAuthAccessToken(access_token);
110: builder.setOAuthAccessTokenSecret(access_token_secret);
111: builder.setMediaProvider("TWITTER");
112:
113: Configuration conf = builder.build();
114:
115: ImageUpload imageUpload = new ImageUploadFactory(conf)
116: .getInstance();
117:
118: try {
119: imageUpload.upload(file, content);
120: } catch (TwitterException e) {
121: e.printStackTrace();
122: }
123: }
124:
125: return res;
126: }
127:
128: /**
129: * 토큰 얻기
130: * @return
131: * @throws TwitterException
132: */
133: private void getToken() throws TwitterException {
134: // 토큰이 발행 되지 않았으면
135: if (null == acToken) {
136: // 최근 사용한 토큰 읽기
137: access_token = Util.getSharedPreferencesValue(this, "coolsharp", MODE_PRIVATE, ACCESS_TOKEN);
138: access_token_secret = Util.getSharedPreferencesValue(this, "coolsharp", MODE_PRIVATE, ACCESS_TOKEN_SECRET);
139:
140: // 토큰 값이 모두 있으면
141: if ((!access_token.equals("")) && (!access_token_secret.equals(""))) {
142: // 기존 토큰 값으로 토큰 발행
143: acToken = new AccessToken(access_token, access_token_secret);
144: twitter.setOAuthAccessToken(acToken);
145: }
146: else {
147: // 인증 시작
148: startAuth();
149: }
150: } else {
151: }
152: }
153:
154: /**
155: * 인증 시작
156: * @throws TwitterException
157: */
158: private void startAuth() throws TwitterException {
159: rqToken = twitter.getOAuthRequestToken(CALLBACK_URL.toString());
160: startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(rqToken.getAuthorizationURL())));
161: }
162:
163: /**
164: * @throws TwitterException
165: */
166: private void getList() throws TwitterException {
167: List<Status> statuses;
168: Paging page = new Paging();
169: page.count(20);
170: page.setPage(1);
171: statuses = twitter.getHomeTimeline(page);
172: for (Status status : statuses) {
173: Log.i("coolsharp", status.getText());
174: }
175: }
176:
177: /* (non-Javadoc)
178: * 인텐트 생성
179: * @see android.app.Activity#onNewIntent(android.content.Intent)
180: */
181: protected void onNewIntent(Intent intent) {
182: super.onNewIntent(intent);
183: Uri uri = intent.getData();
184: if (uri != null && CALLBACK_URL.getScheme().equals(uri.getScheme())) {
185: String oauth_verifier = uri.getQueryParameter("oauth_verifier");
186: try {
187: acToken = twitter.getOAuthAccessToken(rqToken, oauth_verifier);
188: access_token = acToken.getToken();
189: access_token_secret = acToken.getTokenSecret();
190: Util.setSharedPreferencesValue(this, "coolsharp", MODE_PRIVATE, ACCESS_TOKEN, access_token);
191: Util.setSharedPreferencesValue(this, "coolsharp", MODE_PRIVATE, ACCESS_TOKEN_SECRET, access_token_secret);
192: } catch (TwitterException e) {
193: Log.e("coolsharp", e.getMessage());
194: }
195: }
196: }
197: }