Join Now
Quality Rating:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)
Expertise Level:
  • Currently 0.0 / 5
(0.0 / 5 - 0 votes cast)

This page was last modified 04:42, 2 May 2008.

AIW サービス・ハンドラ(Service Handler) API

From Forum Nokia Wiki

英語版:AIW Service Handler API


Note!
このAPIは、公開SDKには含まれていません。SDK API Plug-inに含まれています。


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;


Example project

Image:AIWConsumer.zip

Emergency call exmaple 

Related Discussions
Thread Thread Starter Forum Replies Last Post
How to get picture SMS messages out of my phone? Nokia_Archive General Messaging 1 2002-05-20 12:39
6020 multimedia massage eror nazirna General Discussion 2 2006-09-03 05:21
Is it possible to use IMlet to be a filter for SMS remote-control commands too? nimbuslin Nokia M2M 3 2005-03-03 14:06
Is it ActiveScheduler Problem??? kiran10182 General Symbian C++ 13 2006-06-06 14:46
sis在运行时候出错 wengnankai Symbian 19 2006-07-28 03:09
 
Powered by MediaWiki