Developers‎ > ‎マニュアル‎ > ‎

Actionプラグインアプリの作成

5 Actionプラグインアプリの作成

Actionプラグインアプリでは、BLOCCOのEventプラグインアプリの判定後の最終処理をおこないます。Actionプラグインアプリでは、Inputプラグインアプリ/Processプラグインアプリを指定して様々なデータの取得/加工が可能です。
Actionプラグインアプリでは、設定用Actvity、Installer、結果を受信するReceiver、結果を実行するServiceもしくはActivityアプリを1つのパッケージに保持する構成になります。

 アプリケーションActivity Service BroadcastReceiver
 設定用Activity ◯ × ×
 Installer(インストール用BroadcastReceiver) ×× ◯ 
 結果を受信するReceiverと、結果を実行するServiceまたはActivity ◯◯ ◯ 

Actionプラグインアプリでは、Eventプラグインアプリの判定後に、出力結果を含んだBroadcastがBLOCCO本体より発行されるので、そのBroadcastを受信したタイミングで、Actionプラグインアプリが起動します。BLOCCOでの結果の実行には、画面表示を必要とする場合はActivityを、画面表示を必要としない場合はServiceを起動します。 

Actionプラグインアプリで取得可能な形式は、BLOCCOより指定された形式を取得可能になります。BLOCCO本体からは、XML形式で値が送付されてくるので、BloccoOutputManagerで展開し、所定の型のクラスに格納し、Actionプラグインの結果として使用します。

Actionプラグインアプリで使用可能なデータ形式一覧

※各形式の詳細はjavadoc参照

一番簡単なFORMAT_TYPE_TEXTに関して解説します。
BLOCCO本体からイベントの結果がXML形式で送られてきます。

<input name=”moji”> 
    <text>テスト用の文字列</text>
</input>

Actionプラグインアプリでは、上記XMLを取得し、BloccoOutputManagerのメソッドを用いて、TextData型のクラスに格納します。 
BloccoOutputManager bloccoOutput = new BloccoOutputManager(this); 
bloccoOutput.setOutput(intent);
String mojiXml = bloccoOutput.getCommand("moji");
int formatType = bloccoOutput.parseOutputCommand(mojiXml);
ArrayList<TextData> textDataArray = (ArrayList<TextData>) bloccoOutput.getData();

TextData型クラスの配列に格納されているのは複数の値を受信した場合にも対応可能にする汎用性を持たせるためにおこなっています。
最後に、TextData型の配列の0番目のdataという名前の変数にアクセスすると、<text>テスト用の文字列</text>の中のテスト用の文字列を取得する事が可能になります。 
TextData tData = TextDataArray.get(0);
String data = tData.data;

BLOCCOの基本設計では、BLOCCOと各プラグイン間は、すべてXML形式でデータをやり取りし、各プラグイン内では、そのXMLを各種型のクラスに格納し使用しています。 

また、すでに既存のアプリケーションを提供中の場合に、BLOCCOと連携したい場合は、BLOCCOの出力結果として、 “com.blocco.output.ACTION “のアクション名のBroadcastが通達されるので、Receiverアプリを既存アプリに組み込む事で、BLOCCOから呼び出す事が可能になります。Actionプラグインアプリでは、条件設定も必須な仕様になっているので、それと同時に条件設定用のActivityも用意してください。

5.1 Actionプラグインアプリのインストーラーの作成

ActionプラグインアプリもEventプラグインアプリ、Inputプラグインアプリ同様にInstallerによりInstall処理を行う必要があります。 
ActionプラグインアプリのBLOCCO本体へのインストール処理は、 EventプラグインアプリやInputプラグインアプリ同様に①~③の流れで行われます。 
ActionプラグインアプリをBLOCCO本体にインストールするために、AndroidManifest.xmlにアクション名"com.blocco.output.INSTALL"が受信できるように、<receiver ... >~</receiver>の記述を追記し、BLOCCO本体からのBroadcastを受信し、ActionプラグインアプリからBLOCCO本体にActionプラグインアプリの情報を含んだBroadcastを行う事で、インストール処理をおこないます。 

 アクション名 発行者 受信者 明示的 or 暗示的 概要
 ① android.intent.action.PACKAGE_ADDED Androidシステム BLOCCO 暗示的 インストールされたActionプラグインアプリのパッケージ名等が含まれたIntentが取得できる。
 ② com.blocco.output.INSTALL BLOCCO Actionプラグインアプリ 暗示的 ①で取得したパッケージ名でパッケージ名を指定したActionプラグインアプリにBroadcastする。
③ com.blocco.output.OUTPUT_INSTALL Actionプラグインアプリ BLOCCO 明示的 Actionプラグインアプリの情報を含んだIntentをBroadcastする。

サンプル : Input情報出力

DisplayInputInstaller.java

3行目でBloccoOutputManagerをImportします。 
import com.blocco.plugin.BloccoOutputManager; 

48行目で、BloccoOutputManagerのインスタンスを生成します。 
BloccoOutputManager bloccoOutput = new BloccoOutputManager(context); 

51行目~60行目では、設定Activityとイベント発火後の処理を受け取るBroadcastReceiverを記述し、Install処理をおこないます。 
bloccoOutput.setActivity("OutputActivity"); 
bloccoOutput.setReceiver("OutputReceiver");
bloccoOutput.setIntro("OUTPUTアプリです。");
bloccoOutput.install();

AndroidManifest.xml
<receiver android:name=".OutputInstaller"> 
<intent-filter>
<action android:name="com.blocco.input.INSTALL" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

5.2 Actionプラグインアプリの設定画面用Activityの作成

ActionプラグインアプリではInputプラグインアプリ/Processプラグインアプリの呼び出し設定やActionプラグインアプリの出力の設定を、設定画面用Activityで作成します。 
Actionプラグインアプリの処理にはBloccoOutputManagerを用います。また、Input/Processプラグインアプリの呼び出しには、BloccoProcessManagerを用います。
BloccoOutputManager.buildUi()で、画面下にSaveボタンとCancelボタンを表示します。
Processプラグインアプリ/Inputプラグインアプリの呼び出しは、BloccoProcessManager.getInput(ボタンID,フォーマット形式); で、Actionプラグインアプリで受け入れ可能なOutput形式を指定します。

指定可能なOutput形式は下記の通りです。
※各形式の詳細はjavadoc参照

このようにする事で、ボタンを選択するとInputプラグインアプリとProcessプラグインアプリの一覧が表示されるようになります。
ActionプラグインアプリのAcitvityで、BloccoProcessManagerListenerを実装(Implements)し、BloccoProcessManager.setProcessActivityListener(this);を呼び出す事で、BloccoProcessManagerで発生するイベントが取得可能になります。
BloccoProcessManager,getInput()で関連づけしたボタンからとれるイベントは、BloccoProcessManager.setBloccoServiceListener()で取得する事が可能になります。 
BloccoProcessManager.setBloccoServiceListener(new BloccoServiceListener() { 
    @Override
    public void onPipe(String pid, String processId, String outputFormatType, String pluginType, String value) {
        mPid = pid;
        mProcessId = processId;
        mPluginType = pluginType;
        mValue = value;
    }
});

このようにして、Inputプラグインアプリ/Processプラグインアプリで取得できた設定値は、onSave()の中で、BloccoOutputManager.setCommand()を呼び出し値を設定する事で、BLOCCO本体に保存します。
bloccoOutput.setCommand( “起動タイプ”, “Key名”, “プラグインID”, “プロセスID”, “値”, “Input/Processで設定されたコマンド”); 

BloccoOutputManager.setCommand()で設定する値の意味は下記の通りです。


 第1引数 起動タイプ
BloccoOutputManager.PLUGIN_TYPE_INPUT/PROCESSプラグインを設定
BloccoOutputManager.PLUGIN_TYPE_PROCESS/PROCESSプラグインを設定
BloccoOutputManager.PLUGIN_TYPE_TEXT/通常な値
 第2引数 条件設定Activityで設定したKey名 
 第3引数 プラグインID(イベントリスナーで取得した値)
 第4引数 プロセスID(イベントリスナーで取得した値)
 第5引数 設定された値
 第6引数 Input/Processプラグインアプリで設定されたコマンドの値

サンプル : Input情報出力

DisplayInputActivity.java

3行目~6行目でBLOCCO関連ライブラリを取り込みます。
13行目で、BloccoOutputManagerListenerとBloccoProcessManagerを実装します。BloccoOutputManagerListenerを実装すると、onCancel(), onSave()を追加します。BloccoProccesManagerListenerはボタン部分で使用します。
public class OutputActivity extends Activity implements BloccoOutputManagerListener, BloccoProcessManagerListener {

64行目で、BloccoOutputMangerを保持するための変数を定義します。
private static BloccoOutputManager bloccoOutput; 

72行目で、BloccoOutputMangerのインスタンスを生成します。
bloccoOutput = new BloccoOutputManager(this); 

75行目~92行目では、Input/Processアプリを選択するためのボタンを実装しています。
75行目と76行目で、 bloccoProcess.getInput(ボタンID, 出力形式)で、出力形式を指定する事で、その形式に対応したInput/Processアプリの一覧が表示されるようになります。
95行目~115行目ではRadioGroupの処理をおこなっています。
118行目の bloccoOutput.buildUi()でSaveボタン/Cancelボタンを表示しています。
127行目~130行目では、キャンセルの処理をおこなっています。キャンセルの際には、bloccoOutput.cancel()を選択します。
137行目~156行目では、保存の処理をおこなっています。

第一引数が、Plugin形式を指定します。ProcessManagerによりInput/Processから値を取得する場合は、ProcessManagerのイベント発生時の値をいれます。それ以外では、 bloccoOutput.PLUGIN_TYPE_TEXTを指定します。

第二引数は、Key名を、第三引数はPluginのIDであるPidを、第四引数はPluginのProcessを指定するProcessIDを、第五引数は、Key名に設定する値を、第六引数は165行目~173行目で取得できるCommandを入力します。
bloccoOutput.setCommand(mPluginType,
 "data",
mPid,
mProcessId,
mValue,
mCommand);

165行目~171行目の onActivityResultではInput/Processプラグインアプリで設定されたコマンドを取得するのに用います。

Main.xml
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" android:paddingtop="70px">
<button android:id="@+id/button" android:text="Input/Process" android:layout_width="fill_parent" android:layout_height="wrap_content">
<radiogroup android:id="@+id/radiogroup" android:layout_width="wrap_content" android:layout_height="wrap_content">

<radiobutton android:id="@+id/ig" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="BLOCCOウィジェットに出力" android:textcolor="#000000">
<radiobutton android:id="@+id/web" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Webに出力" android:textcolor="#000000">
</radiobutton></radiobutton></radiogroup>

</button></linearlayout>

AndroidManifest.xml
<activity android:name=".OutputActivity" android:label="@string/app_name"> 
<intent-filter>
<action android:name="com.blocco.output.SETTING" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>

AndroidManifest.xmlでは、”com.blocco.output.SETTING”の呼び出しで条件設定用Activity画面を起動します。

5.3 ActionプラグインアプリのReceiverの作成

Eventプラグインアプリの発火後の通知は、アクション名"com.blocco.output.ACTION"のBroadcastにより伝達されます。ActionプラグインアプリではBroadcastの通知を、Receiverにより受信し、結果表示用のアプリを起動します。 
BloccoOutputManager.setOutput(Intent)で、アクション名”com.blocco.output.ACTION”でBroadcastされたIntentを代入し、BLOCCOから送られてきた実行結果を展開します。 
展開した結果は、条件設定用Activityで設定されたキー名をつかって、BloccoOutputManager.getCommand("キー名"); 
で取得する事が可能です。取得した値を使って、ActitivtyやServiceを実行し、結果を表示します。
また、BLOCCOに付属して提供されるActionプラグインアプリであるBLOCCOウィジェットに出力したり、AndroidシステムのNotificationに表示する事も可能な仕組みが用意されています。表示には、BloccoOutputManager.bloccoNotifty()やBloccoOutputManager.androidNotify()を呼び出します。 
BloccoOutputManager.bloccoNotify()
BloccoOutputManager.androidNotify()

サンプル : Input情報出力

DisplayInputReceiver.java 

4行目~5行目で、Blocco関連のライブラリをimportします。
import com.blocco.plugin.BloccoIgManager; 
import com.blocco.plugin.BloccoOutputManager;

66行目で、BloccoOutputManagerのインスタンスを生成します。
BloccoOutputManager bloccoOutput = new BloccoOutputManager(context);

69行目で、Bloccoより送付されてくるActionアプリ用のコマンドを展開しています。
bloccoOutput.setOutput(intent);

72行目、73行目でOutputActivityで指定したKey名から値を取得しています。
String type = bloccoOutput.getCommand("type");
String data = bloccoOutput.getCommand("data");

81行目~86行目では、type=1つまりBLOCCOウィジェットに表示する場合の処理を記載しています。
88行目~100行目では、type=2つまりWebブラウザを起動する場合の記述をしています。 
Webに表示の場合は、OutputResultを実行しています。

AndroidManifest.xml 

<receiver android:name=".OutputReceiver">
<intent-filter>
<action android:name="com.blocco.output.ACTION" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>

AndroidManifestでは、”com.blocco.output.ACTION.”のアクション名のBroadcastをReceiverで受信できるように、Receiverの項目に追加しておきます。

サンプル : Input情報出力

DisplayInputResult.java 

DisplayInputResult.javaでは、ActionアプリでDisplayInpuReceiverで受信したBloccoの処理結果を実行しています。本サンプルでは、WebページにBloccoのInputアプリで取得した結果を表示しています。

AndroidManifest.xml
<activity android:name=".OutputResult"> 
    <intent-filter>
        <action android:name="android.app.action.MAIN" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

AndroidManifestでも同様にActivityが実行できるように設定しておきます。
ċ
DisplayInputActivity.java
(6k)
Hayato Ito,
2011/04/01 2:51
ċ
DisplayInputInstaller.java
(5k)
Hayato Ito,
2011/04/01 2:51
ċ
DisplayInputReceiver.java
(9k)
Hayato Ito,
2011/04/01 2:51
ċ
DisplayInputResult.java
(1k)
Hayato Ito,
2011/04/01 2:51
Comments