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

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

4 Inputプラグインアプリの作成

Inputプラグインアプリでは、Eventプラグインアプリの結果や内外部のデータリソース(GPS,モーションセンサー,インターネット上のデータ)を取得し、指定がある場合はProcessプラグインアプリを経由して、Actionプラグインアプリにデータを受け渡します。Inputアプリのデータ取得元は、Eventアプリの出力結果もしくはインターネットやローカル(GPS)から取得する事が可能です。

Inputプラグインアプリでは、入力と出力のフォーマットを指定する必要があります。EventプラグインアプリとInputプラグインアプリのフォーマット形式が一致した場合、つまりEventプラグインアプリのOutput形式とInputアプリのInput形式が一致した場合、データを継承する事が可能です。また、Actionプラグインアプリからも同じデータ形式のInputプラグインアプリを出力条件に設定する事ができるしくみになっています。

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

各形式の詳細はjavadoc参照

Inputプラグインアプリでは、Installerとデータ取得用のServiceにより構成されています。データ取得の際に条件設定が必要な場合は、条件設定用のActivityを追加する事も可能です。

 アプリケーション Activity    Service     BroadcastReceiver
 Installer(インストール用BroadcastReceiver) ×
× ◯ 
 条件設定用Activity(必要がある場合) ◯ × ×
 データ取得用Service × ◯ ×

4.1 InputプラグインアプリのInstallerの作成

InputプラグインアプリをBLOCCO本体に組み込むには、インストーラーを作成します。

InputプラグインアプリをBLOCCO本体へインストールする処理は、 ①~③の流れで行われます。InputプラグインアプリがAndroidにインストールされると、Androidシステムからandroid.intent.action.PACKAGE_ADDEDのアクション名でBroadcastが発行されます。BLOCCO本体では、そのBroadcastを受信し(①)、BLOCCO本体からcom.blocco.input.INSTALLのBroadcastがInputプラグインアプリに対して発行されます(②)。Inputプラグインアプリは、自分がBLOCCOプラグインアプリである事を証明しインストール処理をおこなうために、com.blocco.main.INPUT_INSTALLのアクション名のBroadcastをBLOCCO本体に発行し(③)、それを受信したBLOCCO本体がInputプラグインアプリのインストール処理をおこないます。 


Inputプラグインアプリで、BLOCCO本体へのインストール処理で必要なアクション名"com.blocco.input.INSTALL"の Broadcastを受信できるように、<receiver ... >~</receiver>の記述を追記します。 

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

InputプラグインアプリのInstallerを作成するには、Blocco.jarに含まれるBloccoInputManagerを使用します。

BloccoInputManager.setInvokeType()で設定する値は、下記の通りです。

設定値である起動タイプは、条件設定用Activityの有無で区別します。
 BloccoInputManager.INVOKE_TYPE_PLUGIN 設定なしのプラグイン
 BloccoInputManager.INVOKE_TYPE_PLUGIN_SETTING 設定ありのプラグイン

サンプル : 日時取得INPUT

DatetimeInputInstaller.java

3行目でInputアプリで使うパッケージをImportします。
import com.blocco.plugin.BloccoInputManager;

25行目では、設定アプリが存在する場合に、そのActivity名を指定します。40行目で指定する起動タイプが、INVOKE_TYPE_PLUGIN_SETTINGの場合は、Activity名の指定が必須です。INVOKE_TYPE_PLUGINの場合は、本記述は必要ありません。
bloccoInput.setActivity(""); 

28行目では、Inputアプリでデータ処理をするためのService名を指定します。  
bloccoInput.setService(".DatetimeInputService");


31行目、34行目ではInputアプリで扱えるInputのデータ形式と、Outputのデータ形式を定義します。
BloccoInputManager#setInputFormatType(), BloccoInputManager#setOutputFormatType()で設定するInputとOutput形式は下記表より選択する事が可能です。 

※各形式の詳細はjavadoc参照

37行目ではInputアプリの説明文を定義します。
bloccoInput.setIntro("現在日時を取得します。");

40行目ではInputアプリの起動タイプを定義します。 
bloccoInput.setInvokeType(BloccoInputManager.INVOKE_TYPE_PLUGIN);

起動タイプは、条件設定用Activityの有無で区別します。 

例えば、天気Inputの場合の地域指定などInputで取得するデータの詳細設定が必要な場合は設定あり、一方GPSなどのように1つのInputアプリに対して取得データが固定的なものについては”設定なし”に該当します。 

bloccoInput.setInvokeType(bloccoInput.INVOKE_TYPE_PLUGIN);   
 変数用途 
 BloccoInputManager.INVOKE_TYPE_PLUGIN設定なしのプラグイン 
 BloccoInputManager.INVOKE_TYPE_PLUGIN_SETTING 設定ありのプラグイン

4.2 Inputプラグインアプリのデータ取得用Serviceの作成

Inputプラグインアプリでは、Actionプラグインアプリで必要なデータを提供します。データ取得にはServiceを使用し、 InputプラグインアプリのServiceをonBindする事で、データを取得します。
Inputプラグインアプリでは、データ取得用のServiceを生成する際に、BloccoInputListenerをImplementsし、onBind()の中で、BloccoInputManager.setInputListener(this)を記述し、onBind()の返り値に、 BloccoInputManager.serviceInput();を返す事で、BLOCCO本体と連携され、BLOCCOから データ取得の問い合わせで、Service のonCallメソッドを呼び出す事が可能になります。 取得したデータは、BloccoInputManager.result(String)を を呼び出す事で、BLOCCO本体に取得したデータを渡す事が可能になります。

サンプル : 現在日時取得INPUT

DatetimeInputService.java

5行目~7行目で、Blocco関連のライブラリを取り込みます。
import com.blocco.plugin.BloccoInputListener;
import com.blocco.plugin.BloccoInputManager;
import com.blocco.plugin.format.DatetimeData;


18行目で、Blocco本体からService接続された場合のListenerを実装します。
public class DatetimeInputService extends Service implements BloccoInputListener{

31行目で、BloccoInputManagerで、BloccoInputManagerのインスタンスを生成します。
bloccoInput = new BloccoInputManager(this);

29行目~35行目では、Blocco本体がBloccoにService接続(onBind)した際の処理を記述します。

43行目~67行目では、Blocco本体からInputアプリにService問い合わせ(onCall())があった際の処理を記述します。

67行目では、Inputアプリの処理結果をXML形式で返します。
bloccoInput.result(resultXml);

AndroidManifest.xml
<service android:name=".DatetimeInputService" android:exported="true">
    <intent-filter>
        <action android:name="com.blocco.input.SERVICE_START" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</service>

AndroidManifest.xmlでは、”com.blocco.input.SERVICE_START”の問い合わせにServiceが対応できる用に記述を追加します。
ċ
DatetimeInputInstaller.java
(1k)
Hayato Ito,
2011/03/31 21:12
ċ
DatetimeInputService.java
(2k)
Hayato Ito,
2011/03/31 21:12
Comments