カスタムプラグインを作成する(3)プラグインの戻り値を処理する

cordova-plugin-mediaプラグインで利用するMediaコンストラクタには、パラメータとして、3通りのコールバック関数を登録できます。

ここまでで作成したPlaySound Client Actionで利用しているmedia.play関数を想定し、戻り値を返す処理を書いてみます。

Mediaに設定可能なコールバック

mediaSuccess:play関数終了時に呼ばれます。省略可能。

mediaError:Mediaの処理中にエラーが発生したら呼ばれます。省略可能。

mediaStatus:Mediaの状態が変化したときに呼ばれます。パラメータとして「media.MEDIA_」で始まる定数が渡ってきます。省略可能。

今回はこの中からmediaSuccessを設定してみます。

コールバック関数とClient Actionのつなぎ方

カスタムプラグインClient Actionの処理の流れ

  1. cordovaのプラグインがイベント発生を検知
  2. Meidaコンストラクタに渡した対応するコールバックが呼び出される
  3. コールバック中でJavaScript Flow Elementの出力パラメータに値を設定し、$resolve()する
  4. 後続のAssign Flow ElementでJavaScript Flow Elementの出力パラメータをClient Actionの出力パラメータに設定する

$resolve()

所属するJavaScript Flow Elementで$resolveを呼ぶことで、Client Actionは非同期として扱われます。

そして、$resolve()を呼んだ時点が非同期処理の終了となり、呼び出し元に制御が戻るようです。

コールバック実装

play関数は音を鳴らしているだけなので、受け取るべき値はありません。

ただし、エラー時の処理も後で書きますので、処理成功時の処理に来たら、true、エラー処理の来たらfalseを設定する「Success(Boolean)」出力パラメータを用意します。

上で書いたように、パラメータはJavaScript Flow ElementとClient Actionそれぞれに必要です。

プラグインのJavaScriptの実装。前回に比べてコンストラクタの第2引数にコールバック関数を追加しています。

var media = new Media($parameters.FilePath,
    function () {
        $parameters.Success = true;
        media.release();
        $resolve();
    }
);
media.play();

テスト用モバイルアプリケーションを作り、PlaySound Client Actionを呼ぶ前と呼んだ後に日時を変数に保存(Assign)するようにして確認してみました。

この処理で、約20秒の音声再生の前後の時間を変数に保存できています。つまり、PlaySoundの成功時コールバックが戻ってきてから無事に後続処理が実行できたということですね。

関連

シェアする

  • このエントリーをはてなブックマークに追加

フォローする