Activityをリンクやブラウザから開くには…やり方&コード例

たとえばサーバーと連携するAndroidアプリを開発する場合・・・

  • ウェブページからActivity起動したい
  • リンククリックでアプリ起動したい

・・・みたいな場面があるはず

これって難しそうだけど、実は超簡単にできます。
実際 AndroidManifest に数行のコードを書くだけなんで簡単です。

そういう訳で、HTMLリンクからActivity・アプリ起動するテクニックを紹介

次みたいな手順です。

まずリンクから起動したいActivityを作ります。

Android Stuido の場合だと、

  1. プロジェクトからメニューを開く
  2. メニューから「New」=>「Activty」
  3. Activityのレイアウトとソースが作成される

こういう手順ですね。

とはいえ、作成するActivityの種類はなんでもいいです。

ここでは説明のため、 MainActivity  っていうのを作ったことにします。

あとActivity側のコード・レイアウトでは、なにか細工する必要もありません
本当に純粋に普通の Activity と同じように作成すればOK

肝心なのはココから

次の作業は AndroidManifest.xml に少し細工をすること

リンクから起動したい activity  タグに数行追加します。

 

例えば MainActivity  を作成したとき、
AndroidManifest.xml に次みたいな activity  タグが生成されますよね?

▼ AndroidManifest.xml の例

 

HTMLリンクから起動したい場合、次みたいに intent-filter  を追加します。

▼ こんな感じで intent-filter  追加!

大事なポイントは次の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 起動できません。

特にスキームは他アプリと被ったりしないよう、必ずパッケージ名とかにしときましょう。

最後はActivity起動するリンクを作成するだけ

これは普通に intent-filter  に書いたスキームでリンクを作るだけです。

 

ここで例に出した MainActivity  の場合・・・
次のようなリンクを作ればクリック時に Activity が起動するようになるはずです。

あとはこのリンクを適当なページに貼っておくだけでOK

アプリインストール状態でリンクをクリックすれば、Activityが起動します。

補足.アプリがない場合のフォールバックも作っておく

それで、このリンクはアプリが存在する場合だけ機能します

まあ当たり前ですよね。アプリが存在しないのに Activity だけ起動したら怖いです。
あと当然ながら、Windows や iPhone などのAndroid端末以外でも機能しません。

なのでそれ専用のフォールバックを作っておきます。

そういうリンクの作り方は次の通り

 

1.まず先ほどのリンクを次みたいに改造

2.そしてJSコードで launchAppOrFallback  関数を定義

▲ こういうコードで上手くいくはず

 

ちなみにこのテクニックは次記事から拝借させてもらいました。

▼カスタムURLスキームでアプリ起動 or アプリ無ければストア遷移

これでアプリが存在する場合はActivity起動、
そうでないならストアページに遷移する処理が可能です。

もしWebサービス自体をアプリ化したいなら、こういう工夫も必要ですね。

ここまでのまとめ

簡単にやり方を箇条書き

  1. リンクから起動したい Activity を作成する
  2. AndroidManifest.xml に intent-filter を追加
  3. Acitivityを起動できるHTMLリンクを作る

なんかサーバーと連携するアプリだったり、
ブラウザ起動するアプリだと使えるテクニックかもしれません。ではまた($・・)/~~~