2013年12月3日火曜日

Android Chromeからアプリを起動する

もうひとつのProfessional Programmerと同じ内容です。 English is here iOSとSafariの組み合わせと同様に, AndroidのChromeアプリから, AndroidのIntentが呼び出せます。つまりアプリが起動できます。 アプリに対してパラメータを入れたりすることができます。

ステップ

  • Androidアプリケーションの準備
  • URLの準備
  • Chromeを開いて, リンクを表示し, 実行


Androidアプリケーションの準備

例として, 起動するためのActivity, MainActivityに 設定は, AndroidManifest.xml に書きます。
<activity android:label="@string/app_name" android:name="com.atmarkplant.webapp.MainActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.Holo.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
 
                <category android:name="android.intent.category.LAUNCHER"/>
            </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="key" android:host="application" android:path="/"/>
            </intent-filter>
 </activity>
ポイントは, 2段目のintentfilterです。 action, category のところはコピペでO.K. 最後のdataのandroid:schme, android:host, android:pathは, Chromeのリンクのパラメータとして 利用するので, ここをカスタマイズしていきます。

URLの準備

リンクを作ります。筆者は, これ用のサーバを用意し, HTMLファイルを用意してリンクを作りました。
<a href="intent://application/#Intent;scheme=key;package=com.atmarkplant.webapp;end"> Start Web App </a>
書式は, このようになります。Google Developer参照
intent:
   HOST/URI-path // Optional host 
   #Intent; 
      package=[string]; 
      action=[string]; 
      category=[string]; 
      component=[string]; 
      scheme=[string]; 
   end; 
上でいう例は, hostに, application, path は, /, schemeには, key というのをそれぞれ入れました。 package は, アプリのパッケージのことです。

Chromeを開いて, リンクを表示し, 実行

早速実行してみましょう。 実行方法は, Chrome を開いて, このリンクを表示させます。そしてリンクをたたきます。 リンクを開くと, Androidアプリケーションが起動します。

パラメータの渡し方・受け取り方

まずは, 渡し方です。これはリンクの中に埋め込みます。
<a href="intent://application/#Intent;scheme=key;package=com.atmarkplant.webapp;S.key1=value1;S.key2=value2;end"> Start Web App </a>
S. をつけて, key = value という形で表現します。ここでいう例は, key1, value1, key2, value2 になります。

続いて受け取り方です。結構迷いましたが, 単純に考えればわかります。intent で受け取っているので, Activity からgetIntent()で Intentを取得して, そこから値を取り出します。通常の起動方法の場合は, 値はnullになります。
Intent intent = getIntent();
String value1 = intent.getStringExtra("key1");
String value2 = intent.getStringExtra("key2");
このコードを, Activityのどっかに埋め込みます。それにより挙動が返られますね。先ほど申しましたとおり, パラメータを渡さない 通常のアプリとして起動すると, value1, value2は, nullになります。

0 件のコメント:

コメントを投稿