AIW サービス・ハンドラ(Service Handler) API
Article Metadata
Code Example
Article
AIWサービス・ハンドラAPIの目的は、AIWコンシューマ・アプリケーションに、アプリケーション相互作用フレームワーク(Application Interworking framewokr)のコア機能を与えることです。これには、AIWフレームワークのコアであるサービス・ハンドラ・オブジェクトを使用します。
ユース・ケース
最も重要なAIWサービス・ハンドラAPIの使用例は、つぎの物です:
サービス・ハンドラ・インスタンスの作成
インタレストの追加
ベース・サービス メニュー・サービス
メニュー・ペインの初期化
サービス・コマンドの実行
ベース・サービス・コマンド
メニュー・サービス・コマンド
サービス・ハンドラ・インスタンスの削除
サンプル・コード
サービス・ハンドラ・インスタンスの生成 AIWサービス・ハンドラ APIを使用するために、コンシューマ・アプリケーションは、最初に、サービス・ハンドラ・インスタンスを作成する必要があります。
// Create a service handler instance.
iServiceHandler = CAiwServiceHandler::NewL();
インタレストの追加
サービス・ハンドラ・インスタンスが存在するとき、AIWサービス・コマンドが実行する前にコンシューマ・アプリケーションのインタレストを追加する必要があります。追加が必要なのは通常一回のみで、その適切な場所は、コンシューマ・アプリケーションのConstructL() メソッドです。
ベース・サービス
ベース・サービス・インタレストは、CAiwServiceHandler::AttachL()を使って追加します。
// Attach base service interests.
iServiceHandler->AttachL(R_AIWEXAMPLE_BASEINTEREST);
インタレストは、リソース・ファイル内で定義されます。詳細は、AIW基準APIを参照してください。
メニュー・サービス
メニュー・サービスのインタレストは、CAiwServiceHandler::AttachMenuL()を使って追加します。
iServiceHandler->AttachMenuL(R_AIWEXAMPLE_MENU, R_AIWEXAMPLE_MENUINTEREST);
メニュー・ペインと、基準アイテムに関連したメニューを含むインタレストは、リソース・ファイル内で定義されます。詳細は、AIW基準APIを参照してください。
メニュー・ペインの初期化
AIWメニュー・アイテムを含むメニューペインは、初期化する必要があります。これは、コンシューマ・アプリケーションのDynInitMenuPaneL() 内で行われます。
void CAIWExampleAppUi::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane *aMenuPane )
{
// First, offer menu pane to AIW framework. It might be the case, that the
// user is opening an AIW submenu. In this case, the AIW handles the menu.
if ( iServiceHandler->HandleSubmenuL( *aMenuPane ) )
{
return;
}
// Add your normal (non-AIW) menu initialisation code here...
// Let AIW provider add its menu items to the menu.
iServiceHandler->InitializeMenuPaneL(
*aMenuPane,
aResourceId,
EAIWExampleCmdLast,
iServiceHandler->InParamListL());
}
この例では、メニューは、AIWサブメニューを持つかも知れません(つまり、サブメニューは、AIWメニュー・アイテムだけも持ちます)。サブメニューは、AIWフレームワークによって処理されます。よって、CAiwServiceHandler::HandleSubmenuL() がETrue を返すならば、なにもする必要はありません。
実際のメニュー・ペインの初期化は、CAiwServiceHandler::InitializeMenuPaneL() によって行われます。EAIWExampleCmdLast は、列挙型の最後の値でなければいけないことに注意してください。サービス・ハンドラは、生成するメニュー・コマンドのidのベースとしてその値を使用します。
サービス・コマンドの実行
AIWサービス・コマンドは、ベース・サービスは、CAiwServiceHandler::ExecuteServiceCmdL() の呼び出しで、メニュー・サービスはCAiwServiceHandler::ExecuteMenuCmdL()の呼び出しで、実行されます。メソッドは、デフォルトでは、ブロックします。しsかし、プロバイダが非同期に動作するようにすることも可能です。その場合、コンシューマは、コールバック・メソッドを実装し、プロバイダ終了後に、呼ばれます。非同期サービス呼び出しの詳細については、"AIW基準API(AIW Criteria API)"を参照してください。
ベース・サービス・コマンド
ベース・サービス・コマンドは、CAiwServiceHandler::ExecuteServiceCmdL()の呼び出しで、実行されます。例えば、以下のようになります(入力パラメータのセット・アップ方法については、AIW Generic Parameter APIを参照):
iServiceHandler->ExecuteServiceCmdL(
KAiwCmdMnShowMap, // The service command.
inParamList, // Input parameter list.
iServiceHandler->OutParamListL(), // No output parameters used.
0, // No options used.
NULL); // No need for callback
);
メニュー・サービス・コマンド
コンシューマ・アプリケーションの"AppUI"クラスには、コールバック・メソッドHandleCommandL(TInt aCommand) があります。これが呼ばれるとき、コンシューマ・アプリケーションは、最初に、コマンドが通常のメニュー・コマンドかどうかを判別しなければいけません。もし、コマンドが識別できなければ、AIWフレームワークにコマンドを転送します。これは、通常スイッチ文のdefault 部分で行われます。
void CAIWExampleAppUi::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case ESomeNonAIWCommand:
{
// Execute command.
// ...
break;
}
case EEikCmdExit:
{
Exit();
break;
}
default:
{
// Forward the command id to AIW, i.e. execute AIW menu
// service command.
iServiceHandler->ExecuteMenuCmdL(
aCommand,
iServiceHandler->InParamListL() // No input parameters
iServiceHandler->OutParamListL(), // No output parameters
0, // No options used.
NULL); // No need for callback
break;
}
}
}
サービス・ハンドラ・インスタンスの削除
サービス・ハンドラのインスタンスは、必要が無くなれば、削除する必要があります。通常、これは、コンシューマ・アプリケーションのデストラクタで行われます。
// Delete the service handler instance.
delete iServiceHandler;


(no comments yet)