ブラウザからアプリを起動する際のschemeについてメモ
まず、基本的なところから書いておくと起動したいアプリのapplicationにintent-filterを設定する
この時、ブラウザからの呼び出しに呼応するように
<category android:name="android.intent.category.BROWSABLE"/>
の記述が必要
次に、schemeの指定について
ブラウザから<a href="hoge://">ほげ起動</a>のような指定で起動させたい場合は、次のように指定する
<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="hoge"/>
</intent-filter>
でも、これだと
<a href="hoge://fuga">
<a href="hoge://hidebu">
でも起動しちゃうので、もう少し条件をつけて<a href="hoge://fuga">の場合だけ起動するようにする
この場合は、hostを指定すればOK
<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="hoge" android:host="fuga" />
</intent-filter>
これだけでもほぼ大丈夫だけど、さらに分岐させたい場合
例えば
<a href="hoge://fuga/init">で初期処理をして起動
<a href="hoge://fuga/restart">で前回の続きから起動
とかしたい場合は、pathを指定してpathを判別してから処理を振り分けるなどすれば良い
intent-filterの指定はこんな感じ
<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="hoge" android:host="fuga" android:path="/init"/>
</intent-filter>
ここで忘れちゃいけないのが、pathは
android:path="init"
ではなく
android:path="/init"
であること。"/"を忘れないように!
まとめると、URLが <a href="scheme://host/path">といった感じになるので、それに合わせてintent-filterを指定すればOK
他にも色々と指定できるパラメータがあるので、そのあたりは公式なドキュメントをどうぞ
http://developer.android.com/guide/topics/manifest/data-element.html
2011年12月8日木曜日
2011年12月2日金曜日
[Android]UNEXPECTED TOP-LEVEL EXCEPTIONでビルドできない
外部ライブラリを使用している古いアプリ(ADT14以前?)をビルドしようとしたら、次のようなエラーがでた
そこで、私がとった対策としては、.classpathのファイルを開いて外部ライブラリの参照を消して再度ビルド。それで問題なく動くようになりました
※ライブラリの参照やら、配置やらを色々と変えて確認したり、色々な方法を試したあとで上記方法を作業しました。ですので、上記方法だけで本当に解消するのか保障はできませんが、いまは再現させられない状態なので、ひとまず参考程度と思ってください
[2011-12-02 20:03:16 - xxxxxx] Dxどうやら、ライブラリを重複して登録しようとしてエラーが発生しているようだ
UNEXPECTED TOP-LEVEL EXCEPTION:
java.lang.IllegalArgumentException: already added: Lxxx/xxxx/xxx/XxxxxxxActivity;
そこで、私がとった対策としては、.classpathのファイルを開いて外部ライブラリの参照を消して再度ビルド。それで問題なく動くようになりました
※ライブラリの参照やら、配置やらを色々と変えて確認したり、色々な方法を試したあとで上記方法を作業しました。ですので、上記方法だけで本当に解消するのか保障はできませんが、いまは再現させられない状態なので、ひとまず参考程度と思ってください
登録:
投稿 (Atom)