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