諸々
ええと、昨晩接続ケーブルを忘れてて、現場到着後速攻で動作確認してみたら難なく 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 なオブジェクト作っとるけど、大丈夫なんかいな。