今日の一言
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]