今日の一言
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 ); } } }
[TrackBack URL: http://akihiro-i.net/~akihiro-i/diary/tb.rb/20120605]