たぼさんの部屋

いちょぼとのんびり

EFO+音声認識アプリについて

目的

EFOページを起動しているブラウザ(標準ブラウザ,FireFox,operaなど)から音声認識アプリを起動させる
音声認識アプリがインストールされていない場合はインストール用ページを表示する
ブラウザの入力欄がフォーカス時に音声認識プログラムを起動する
起動した音声認識プログラムは音声解析結果をEFO側に返す
EFO側は返信データを受信(あるいは定期的に特定ファイルを読み込む)して入力欄に表示する

注意点

scheme名には_は使えないようだ。

EFO javascriptからAPIの呼び出し

window.location.href=URIで開く:URIはアンドロイドアプリのマニュフェストファイルに設定したschema

var URI = "myapp://com.efolab";
window.location.href=URI
  • このURIはアプリ側で受信する

manifest.xmlに以下の記述が必要。
まずブラウザから起動するために、android.intent.category.BROWSABLEを追加。
ブラウザから起動する場合は暗黙的インテントとして起動するため、android.intent.category.DEFAULTも追加。
最後にURLで判定して起動するよう、android:schemeandroid:host、android:pathを指定します。

 <activity android:name="Main" >
     <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:host="com.efolab"
             android:pathPrefix="/"
             android:scheme="myapp" />
     </intent-filter>
 </activity>
  • 受信したintentのパラメータを受け取るには
Intent intent = getIntent();

String action = intent.getAction();  
if(Intent.ACTION_VIEW.equals(action)){
	//ブラウザから起動した時
    Uri uri = intent.getData();
    if(uri != null){
        String param_1 = uri.getQueryParameter("param_1");  
        String param_2 = uri.getQueryParameter("param_2");
        //処理
    }  
}else{
	//アプリを通常起動したとき
}

また、intentから受信できるデータの詳細は別の記事



インラインフレーム iframeでアプリを起動することもできる。
iframe.src=schema://

APIからEFO(js)へのデータ送信(返信)


  1. APIでファイルを作成して、HTML file APIで読み取る
    • この方法はfile APIが手動でファイル選択するしかないからダメそう。
  2. APIでブラウザのキャッシュファイルへ書き込む
  3. APIでブラウザのcookieへ書き込む
  4. APIでSocket server を起動しておき、EFOからのXMLHttpRequestに返信する