トップ «前の日記(2012/06/04(Mon)) 最新 次の日記(2012/06/06(Wed))»
【ソース+水=麦茶色の何か】

半期 四半期 全カテゴリ

今日の一言


2012/06/05(Tue) 牛乳うまい [長年日記] 22:30現在 20℃

_ [Android]Androidでブラウザから自作アプリを呼び出す

ブラウザから呼び出したいアプリのAndroidManifest.xmlに、ブラウザから起動させるためのIntentFilterを設定すればいい。

<activity android:name=".TestAppActivity" android:label="@string/app_name" >
  <intent-filter>
    <action android:name="android.intent.action.VIEW"/>
    <category android:name="android.intent.category.DEFAULT"/>
    <category android:name="android.intent.category.BROWSABLE"/>
    <data android:scheme="testapp" android:host="start" android:pathPattern="/.*"/>
  </intent-filter>
</application>

上記の例では、ブラウザから「testapp://start/」というURLを開くことで「TestAppActivity」を開くことが出来るようになる。

また、pathに「android:pathPattern="/.*"/」を指定しているため、「testapp://start/hogehoge」のように、「testapp://start/」以下に自由な文字列を設定できる。

ただし、ブラウザによってはアドレスバーに上記のURLを入力しても検索になってしまうものがある。そのため、基本的には、ページ内にアプリ起動用のリンクを用意することになる。

また、端末が接続されており、adb shellが実行できる場合、コマンドプロンプトから以下のコマンドを打つことで、ブラウザから開くのと同じ暗黙的Intentを発行することが出来る。

> adb shell am start -a android.intent.action.VIEW testapp://start/

なお、呼び出しに使用したURLは以下のようにして取得することが出来る。

【TestAppActivity.java】

package net.i.akihiro.TestApp;

import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;

public class TestAppActivity extends Activity {
private static final String LOG_TAG = "TestApp";

   /** Called when the activity is first created. */
   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
	android.util.Log.println(Log.DEBUG, LOG_TAG, "--> " + this.getClass().getName() + " onCreate().");
       setContentView(R.layout.main);

   	Uri uri = getIntent().getData();
   	if( uri != null )
   	{
   		String uriString = uri.toString();
   		android.util.Log.println(Log.DEBUG, LOG_TAG, uriString );
   	}

   }
}