たとえばサーバーと連携するAndroidアプリを開発する場合・・・
- ウェブページからActivity起動したい
- リンククリックでアプリ起動したい
・・・みたいな場面があるはず
これって難しそうだけど、実は超簡単にできます。
実際 AndroidManifest に数行のコードを書くだけなんで簡単です。
そういう訳で、HTMLリンクからActivity・アプリ起動するテクニックを紹介!
次みたいな手順です。
このページの目次
手順1.リンクから起動したいActivityを作成する
まずリンクから起動したいActivityを作ります。
Android Stuido の場合だと、
- プロジェクトからメニューを開く
- メニューから「New」=>「Activty」
- Activityのレイアウトとソースが作成される
こういう手順ですね。
とはいえ、作成するActivityの種類はなんでもいいです。
ここでは説明のため、 MainActivity っていうのを作ったことにします。
あとActivity側のコード・レイアウトでは、なにか細工する必要もありません。
本当に純粋に普通の Activity と同じように作成すればOK
手順2.AndroidManifest.xml に intent-filter を追加
肝心なのはココから
次の作業は AndroidManifest.xml に少し細工をすること
リンクから起動したい activity タグに数行追加します。
例えば
MainActivity を作成したとき、
AndroidManifest.xml に次みたいな
activity タグが生成されますよね?
▼ AndroidManifest.xml の例
1 2 |
<activity android:name=".MainActivity"> </activity> |
HTMLリンクから起動したい場合、次みたいに intent-filter を追加します。
▼ こんな感じで intent-filter 追加!
1 2 3 4 5 6 7 8 |
<activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.VIEW" /> <data android:scheme="com.hoge.testapp" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> </intent-filter> </activity> |
大事なポイントは次の3つ
- Intentアクションの種類
必ず android.intent.action.VIEW を指定すること
- スキームを必ず指定
上コードのように androd:scheme に対して適当なスキーム名を定義する。他と被ったらまずいので、パッケージ名にしておくのが安全かも。これを指定することでHTMLから com.hoge.testapp:// のようなURLで起動できる
- カテゴリーの種類
このコードの category タグの部分。必ず android.intent.category.DEFAULT と android.intent.category.BROWSABLE を値に指定しておく
この3つの条件を満たしてないと、HTMLリンクから Acitivty 起動できません。
特にスキームは他アプリと被ったりしないよう、必ずパッケージ名とかにしときましょう。
手順3.Acitivity起動するHTMLリンクを作る
最後はActivity起動するリンクを作成するだけ
これは普通に intent-filter に書いたスキームでリンクを作るだけです。
ここで例に出した
MainActivity の場合・・・
次のようなリンクを作ればクリック時に Activity が起動するようになるはずです。
1 2 3 |
<a href="com.hoge.testapp://"> MainActivityを起動する </a> |
あとはこのリンクを適当なページに貼っておくだけでOK
アプリインストール状態でリンクをクリックすれば、Activityが起動します。
補足.アプリがない場合のフォールバックも作っておく
それで、このリンクはアプリが存在する場合だけ機能します。
まあ当たり前ですよね。アプリが存在しないのに Activity だけ起動したら怖いです。
あと当然ながら、Windows や iPhone などのAndroid端末以外でも機能しません。
なのでそれ専用のフォールバックを作っておきます。
そういうリンクの作り方は次の通り
1.まず先ほどのリンクを次みたいに改造
1 2 3 |
<a onlick="launchAppOrFallback();"> MainActivityを起動する </a> |
2.そしてJSコードで launchAppOrFallback 関数を定義
1 2 3 4 5 6 7 8 9 10 11 |
function launchAppOrFallback(){ /// カスタムURLスキームでアプリ起動 var url = 'com.hoge.testapp://'; location.href = url; /// アプリがない時のフォールバック var timerId = setTimeout(function() { /// ストアページに飛ばす location.href = "https://play.google.com/..."; }, 500); } |
▲ こういうコードで上手くいくはず
ちなみにこのテクニックは次記事から拝借させてもらいました。
▼カスタムURLスキームでアプリ起動 or アプリ無ければストア遷移
これでアプリが存在する場合はActivity起動、
そうでないならストアページに遷移する処理が可能です。
もしWebサービス自体をアプリ化したいなら、こういう工夫も必要ですね。
ここまでのまとめ
簡単にやり方を箇条書き
なんかサーバーと連携するアプリだったり、
ブラウザ起動するアプリだと使えるテクニックかもしれません。ではまた($・・)/~~~