Twitter4Jが2.2.5になって、Twitter APIのstatuses/update_with_mediaが使えるようになったというので、さっそく実験してみました。
Twitter4J 2.2.5 released – Twitter4J | Google グループ
とりあえずダウンロードして解凍します。twitter4j-android-2.2.5.zipの方です。
http://twitter4j.org/en/index.html#download
Eclipseで適当にプロジェクト作ります。プロジェクト作ったらプロジェクトのプロパティを開いて、Java Build Pathの設定画面を表示します。
Librariesタブを開いて、Add External JARsをクリックします。
先ほど展開したフォルダから、libの下にあるtwitter4j-core-android-2.2.5.jarとtwitter4j-media-support-android-2.2.5.jarを選択してJARを取り込みます。
あとはこんな感じで実験。ギャラリーの画像を選択してメッセージつけてポストします。
UpdateWithMediaActivity.java
package info.loadlimits.android.updatewithmedia;
import java.io.File;
import twitter4j.TwitterException;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.media.ImageUpload;
import twitter4j.media.ImageUploadFactory;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
public class UpdateWithMediaActivity extends Activity implements
OnClickListener {
private final static int REQUEST_PICK = 1;
private final static String CONSUMER_KEY = "(書き換えてください)";
private final static String CONSUMER_SECRET = "(書き換えてください)";
private final static String ACCESS_TOKEN = "(書き換えてください)";
private final static String ACCESS_TOKEN_SECRET = "(書き換えてください)";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button buttonPost = (Button) findViewById(R.id.buttonPost);
buttonPost.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_PICK);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_PICK && resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = getContentResolver();
String[] columns = { MediaStore.Images.Media.DATA };
Cursor c = cr.query(uri, columns, null, null, null);
c.moveToFirst();
File path = new File(c.getString(0));
if (!path.exists())
return;
ConfigurationBuilder builder = new ConfigurationBuilder();
builder.setOAuthConsumerKey(CONSUMER_KEY);
builder.setOAuthConsumerSecret(CONSUMER_SECRET);
builder.setOAuthAccessToken(ACCESS_TOKEN);
builder.setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET);
// ここでMediaProviderをTWITTERにする
builder.setMediaProvider("TWITTER");
Configuration conf = builder.build();
ImageUpload imageUpload = new ImageUploadFactory(conf)
.getInstance();
EditText textTweet = (EditText) findViewById(R.id.textTweet);
String tweet = textTweet.getText().toString();
try {
imageUpload.upload(path, tweet);
} catch (TwitterException e) {
e.printStackTrace();
}
}
}
}
res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<EditText
android:id="@+id/textTweet"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<requestFocus />
</EditText>
<Button
android:id="@+id/buttonPost"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btn_upload" />
</LinearLayout>
manifest
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.loadlimits.android.updatewithmedia"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="9" />
<uses-permission android:name="android.permission.INTERNET" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:label="@string/app_name"
android:name=".UpdateWithMediaActivity" >
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
ポイントはsetMediaProviderでTWITTERを選択することだけです。
こんな感じでpic.twitter.comにアップロードできました。
OAuth認証ページとか組み込みたければ、こちらを参考に。
[Android] Android+Twitter4JでOAuthするためのソースコード – adakoda

HOMMA Teppei


お世話になります。androidのツイッターアプリを制作しておりまして、こちらで記載されている情報が大変役に立ちました。ありがとうございました。