AndroidのIntent呼び出しの実験(Twiccaに天鳳のURLを渡す)

はじめに

最近(というか半年前くらいからですが)携帯電話としてAndroid系の端末を持つようになりました。折角Androidというフリーで開発環境が揃うOSを使ってるので今回は試しにAndroidアプリを作ってみようと思います。Androidアプリについて調べてみるとAndroidのIntent機能を使うと既存のプログラムと連携して、簡単に便利なソフトを作れそうだったので今回はその機能を使ってみます。具体的にはオンライン麻雀の天鳳のURLを呟くだけのTwicca(AndroidTwitterクライアント)プラグインです。

今回のAndroid開発は↓のようにエミュレータにTwiccaをインストールして作りました。

アプリの簡単な仕様

Android2.2以上だとフラッシュも見れるし天鳳FLASHプログラムを利用出来ればいいかなと。あとTwitter上で呼びかける事多いだろうしTwiccaプラグインで実現できればいいかなということで↓のような感じのモノを作ろうとおもいます。

  • プラグインだけど通常起動も可能で、その場合は生成した文字列(ルームURL)をTwiccaに渡すだけ
  • 発言しかけてる内容を加工して(ルームURLを付けて)Twiccaに戻す(Twicca起動中にも実行できる)

ソースコード(TenhoTweetMain.java)の記述

天鳳のロビーページを見てみましたが、JavaScriptで1000から7999までの番号をランダムに生成してURLに付けてるだけっぽいです。なので↓のように「URL生成メソッド」、「通常起動時の実行メソッド」、「Twiccaから呼び出された時の実行メソッド」の3関数にしました。今回のプログラムの肝は「onCreate」関数内のifで通常起動されたかIntent呼び出しされたかを判定しています。

package jp.kazu_ir.andtest;

import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.widget.Toast;
import java.util.*;

public class TenhoTweetMain extends Activity {
	/** Called when the activity is first created. */
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		if (getIntent().getAction().equals("jp.r246.twicca.ACTION_EDIT_TWEET")) {
			recvTwicca();
		} else {
			sendTwicca();
		}
		// プラグインの終了
		TenhoTweetMain.this.finish();
	}

	// ロビーURL作成
	public String makeLobbyURL() {
		int lobby_id = new Random().nextInt(7000) + 1000;
		String lobby_url = "http://tenhou.net/0/?" + lobby_id;
		return lobby_url;
	}

	// twiccaからintent呼び出しされた
	public void recvTwicca() {
		// 文字列の取得
		String tweet_str = getIntent().getStringExtra(Intent.EXTRA_TEXT);

		// 文字列の追加
		String edit_str = tweet_str + " / そんなことより麻雀やろうぜ " + makeLobbyURL();
		getIntent().putExtra(Intent.EXTRA_TEXT, edit_str);

		// 結果の反映
		setResult(RESULT_OK, getIntent());
	}
	
	// 起動してtwiccaに文字列を渡すだけ
	public void sendTwicca() {
		// twiccaのパッケージを設定
		Intent intent = new Intent(Intent.ACTION_SEND);
		intent.setPackage("jp.r246.twicca");

		// typeを text/plain に設定
		intent.setType("text/plain");

		// つぶやきを設定
		String edit_str = "とりあえず麻雀やろうぜ " + makeLobbyURL();
		intent.putExtra(Intent.EXTRA_TEXT, edit_str);

		try {
			// twiccaのアクティビティを開始
			startActivity(intent);
		} catch (Exception e) {
			// twiccaが入っていない場合
			Toast.makeText(this, "twiccaがインストールされていません。", Toast.LENGTH_LONG)
					.show();
		}
	}
}

Manifestファイルの記述

通常起動(ランチャ起動)する場合と、Twiccaから呼び出される場合があるので「intent-filter」は2つになります
あと動作中にActivityの画面を隠すようにしたいので「android:theme="@android:style/Theme.Translucent"」を記述しておきます。


	
	
		
			
				
				
			
			
				
				
			
		

	

実行例

実行してみるとこんな感じになりました

    • プラグイン自体を起動して突拍子もなく発言


    • 引用して発言(RT)しようとしたツイートを加工(URLを付ける)例

感想

今回初めてIntentの機能を試してみましたが、Intent機能を使うと色々な事ができそうです。本当は「翻訳プラグイン for twicca」みたいな役に立ちそうなソフトを作りたかったけど思い浮かびませんでした。実際に使ってみる前はBroadcastReceiver/Filterクラスの知識が必要かと思いましたが、あれは起動中にシステムから来るメッセージを受け取る場合に使うクラスなんですかね?今回は使わなくて済みました。

参考

  • オンライン対戦麻雀天鳳

http://tenhou.net/

  • Twiccaプラグイン開発

http://twicca.r246.jp/plugins/documents/

  • twitterでつぶやきたい

http://blog.dmnet.tv/shinn-blog/android/

  • BroadcastReceiver関連(使用せず)

http://www.adakoda.com/android/000140.html