諸々

ええと、昨晩接続ケーブルを忘れてて、現場到着後速攻で動作確認してみたら難なく tweet 投入に成功しとります。朝イチから、今日は早く帰って寝るぞー、な気分 (何
メモを以下に。

onPrepareOptionsMenu メソド

状態によってメニュ項目の表示を変更するのに便利。状態を管理するのは boolean な属性にしておきさえすれば、以下のような形で切り替え可能 (以下は MyTracks の例

    startRecording = menu.findItem(MyTracksConstants.MENU_START_RECORDING);
    startRecording.setEnabled(!isRecording);
    startRecording.setVisible(!isRecording);
    stopRecording = menu.findItem(MyTracksConstants.MENU_STOP_RECORDING);
    stopRecording.setEnabled(isRecording);
    stopRecording.setVisible(isRecording);

setEnabled とか setVisible とかって引数の状態によって表示/非表示とかの面倒まで見てくれるようでとても便利ですな。

Handler#postDelayed メソド

Service 使わず定期的に何かをしたい時、以下のドキュメントな方法がある模様。

しかも、ある状態によって起動させたり止めたり、というのも可能。ソース忘れた。例えば以下なカンジで状態が変わる callback から呼ばれる以下なメソドで

private void switchOn() {
    flg = true;
    handler.postDelayed(runnable, 0);
}

みたいな事をヤッてあげて、runnable な定義は以下。

Runnable runnable = new Runnable() {
    public void run() {
        if (flg) {
            doSomething();
            handler.postDelayed(this, INTERVAL);
        }
    }
};

で、スイッチが off になる callback から呼ばれるのが以下。

private void switchOff() {
    flg = false;
}

Activity からの tweet 投入

もの凄く略した実装です。

package jp.shuri.ts;

import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.Configuration;
import twitter4j.conf.ConfigurationBuilder;
import twitter4j.http.AccessToken;
import twitter4j.http.OAuthAuthorization;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class TwitActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Button btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				sendTweet();
			}

        });
    }

	protected void sendTweet() {
		String consumerKey = "consumer key";
		String consumerSecret = "consumer secret";
		String oauthToken = "auth token";
		String oauthTokenSecret = "auth token secret";
		
		Configuration config = new ConfigurationBuilder().build();

		Twitter twitter =
			new TwitterFactory(config).getInstance(
					new OAuthAuthorization(
							config,
							consumerKey,
							consumerSecret,
							new AccessToken(oauthToken, oauthTokenSecret)));

		  try {
			  twitter.updateStatus("test tweet (yamanetoshi)");
			  Log.d("TwitActivity", "tweeted");
		  } catch (TwitterException e) {
			  Log.e("TwitActivity", "tweet failed");
			  e.printStackTrace();
		  }  
	}
}

しかしこれ、ボタン押す度に Twitter なオブジェクト作っとるけど、大丈夫なんかいな。