[Android]URLを指定するみたいにアクティビティを起動する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

routable-androidとは

routable-androidとは、Androidアプリ内で使用可能なURLを作成するためのルーターです。
例えば、「/foo」というURLと特定のActivityをマッピングし、URLを指定して起動させることができます。
また、「foo/:param」のように、パラメータを渡すこともできます。

環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.4
  • Android OS : 4.1.1

まずはroutable-androidを取得しましょう。

% git clone https://github.com/usepropeller/routable-android.git

cloneしたディレクトリをAndroid Liblaryプロジェクトとして参照するか、
Router.javaを任意のプロジェクトにコピーすれば使用することができます。

サンプルを作成して試してみる

適当なAndroidプロジェクトを作成し、「UserActivity」と「BookActivity」を追加しましょう。
デフォルトで作成されたMainActivityに対して次のような記述を追加します。

・
・
・
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		//ルーティング情報を定義
		Router.sharedRouter().setContext(getApplicationContext());
		Router.sharedRouter().map("users/:id", UserActivity.class);
		Router.sharedRouter().map("books/:name/:category", BookActivity.class);

		setContentView(R.layout.activity_main);
	}

	//ボタンクリック時にUserActivityを開く
	public void clickUser(View view) {
		Router.sharedRouter().open("users/100");
	}

	//ボタンクリック時にBookActivityを開く
	public void clickBook(View view) {
		Router.sharedRouter().open("books/akudagawa/ShortStory");
	}

・
・
・

基本的な使い方は簡単で、Router.sharedRouter().map関数でURLとアクティビティをマッピングし、
Router.sharedRouter().open関数でアクティビティを起動させます。

上記サンプルでは、MainActivity作成時に他のアクティビティへのルーティング情報を定義しています。
また、:を使用して、パラメータを渡せるようにもしています。
cliclUserとclickBookは、activity_mainに配置したボタンクリック時に起動するメソッドです。
layout/activity_main.xmlにボタンを配置し、android:onClickでこれらの関数が起動するようにしておいてください。

UserActivityは下記のようになっています。
URLで指定されたパラメータは、Bundleを通じて取得できます。

・	
・	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//パラメータを取得
		Bundle intentExtras = getIntent().getExtras();
		String userId = (String) intentExtras.get("id");
		Log.d("PARAM", "userId = " + userId);
		setContentView(R.layout.activity_user);
	}
・	
・	

BookActivityです。パラメータが複数あっても同じように取得できます。

・	
・	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//パラメータを取得
		Bundle intentExtras = getIntent().getExtras();
		String name = (String) intentExtras.get("name");
		String category = (String) intentExtras.get("category");
		Log.d("PARAMS", "name = " + name + ",category = " + category);
		setContentView(R.layout.activity_book);
	}
・	
・

このライブラリを使用すると、アクティビティの関連が1箇所にまとめられるので、管理が楽になりますね。