Namespaces
Variants
Actions

API Критериев AIW

Jump to: navigation, search
Метаданные

Пример кода
Исходный файл: Media:AIWConsumerBasics.zip

Статья
Перевод:
Оригинал: AIW Criteria API
Последнее редактирование: hamishwillee (16 Dec 2011)

Note.png
Note: :Это API не является частью SDK. Для его использования вы должны установить SDK API Plug-in.

API Критериев AIW содержит классы и определения для использования критериев и интересов AIW. Интерес - это массив, элементами которого являются критерии. Он служит для определения сервисов, использование которых необходимо приложению-клиенту. В свою очередь, сервисы AIW предоставляются через провайдеров сервисов AIW (AIW service providers).

Использование

API Критериев AIW чаще всего используется в следующих целях:

  • Определение интереса клиента в файле ресурсов.
  • Определение интереса клиента динамически.
  • Выполнение асинхронных вызовов сервисов.


Примеры

Определение интереса клиента в файле ресурсов

Интерес клиента обычно задается в файле ресурсов. Следующий пример содержит интересы для меню и базовых сервисов:

Заголовочный файл

#include <AiwCommon.rh>
RESOURCE AIW_INTEREST r_aiwexample_menuinterest
{
items =
{
AIW_CRITERIA_ITEM
{
id = EAIWExampleHelpPlaceholder;
serviceCmd = KAiwCmdHelp;
contentType = "*";
serviceClass = KAiwClassMenu;
}
};
}
RESOURCE AIW_INTEREST r_aiwexample_baseinterest
{
items =
{
AIW_CRITERIA_ITEM
{
id = EAIWExampleBaseServiceId;
serviceCmd = KAiwCmdMnShowMap;
contentType = "application/x-landmark";
serviceClass = KAiwClassBase;
}
};
}

В этом примере, только один элемент-критерий определен в каждом интересе. Вы также можете включить в них несколько критериев, перечислив их через запятую.

Первый элемент-критерий ссылается на сервис меню, т.о. соответствующему провайдеру (провайдерам) AIW будет предложено добавить свой элемент (элементы) в меню приложения-клиента. Второй критерий служит для поиска базового сервиса. Использование комманд базовых сервисов не предполагает автоматического создания каких либо меню. Перечисления используемых идентификаторов должны быть объявлены в HRH файле приложения-клиента.

Элементы меню для сервисов меню задаются в ресурсе MENU_PANE. Пример:

RESOURCE MENU_PANE r_aiwexample_menu
{
items =
{
MENU_ITEM
{
command = EAIWExampleHelpPlaceholder;
txt = "Help submenu";
cascade = AIW_INTELLIGENT_CASCADE_ID | AIW_LOCK_SUBMENU_TITLE;
},
MENU_ITEM
{
command = EAknSoftkeyExit;
txt = "Exit";
}
};
}

В этом примере первый элемент меню является элементом меню AIW, а второй - простой элемент меню. AIW_INTELLIGENT_CASCADE_ID указывает системе AIW, что в случае, если провайдер (провайдеры) AIW предложат более одного элемента меню, они должны быть размещены в подменю. Если бедет найден лишь один элемент - он разместится на одном уровне с прочими.

AIW_LOCK_SUBMENU_TITLE указывает системе AIW, что в случае создания подменю, приложение клиент желает использовать текст "Help submenu" для его корневого элемента. Если некоторые провайдеры предложат свое название - оно будет проигнорировано.

Определение интереса клиента динамически

Интересы могут создаваться динамически. Пример:

// Создаем Обработчик сервисов AIW
CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC();
 
// Создаем интерес AIW
RCriteriaArray interest;
CleanupClosePushL(interest);
_LIT8(KContentTypeLandmark, "application/x-landmark");
CAiwCriteriaItem* criteria = CAiwCriteriaItem::NewLC(KAiwCmdMnShowMap,
KAiwCmdMnShowMap, KContentTypeLandmark);
// Используем базовый сервис.
TUid base;
base.iUid = KAiwClassBase;
criteria->SetServiceClass(base);
 
User::LeaveIfError(interest.Append(criteria));
 
// Подключаем интерес к системе AIW.
serviceHandler->AttachL(interest);
 
...
// Выполняем команды AIW и пр.
...
 
// Выталкиваем из стека очистки и уничтожаем более ненужные объекты.
CleanupStack::PopAndDestroy(3); // criteria, interest, servicehandler

В этом примере константа KAiwCmdMnShowMap используется в качестве идентификатора элемента-критерия. Это не вызовет ошибки - клиент волен сам решать какое значение использовать для идентификатора (для базовых сервисов идентификаторы критериев не имеют особого смысла).

Выполнение асинхронных вызовов сервисов

Некоторые провайдеры сервисов AIW могут поддерживать асинхронный вызов сервисов. Это может пригодится, если вызов не возвращается слишком долго.

В этом случае клиент должен наследоваться от класса MAiwNotifyCallback и реализовать метод MAiwNotifyCallback::HandleNotifyL(). При вызове CAiwServiceHandler::ExecuteMenuCmdL() или CAiwServiceHandler::ExecuteServiceCmdL(), вы должны передать в параметре aCallback указатель на M класс и установить значение aCmdOptions в KAiwOptASyncronous. После этого провайдер может вызвать метод обратного вызова после завершения обработки команды, передав параметр-результат (например, KAiwEventCompleted). Список всех возможных значений параметра функции обратного вызова вы можете найти в AiwCommon.hrh.

Вот пример того, как нужно наследоваться от MAiwNotifyCallback:

Заголовочный файл

#include <AiwCommon.rh>
class CMyConsumerApp : public MAiwNotifyCallback    
{
...
public:
// From MAiwNotifyCallback
virtual TInt HandleNotifyL(
TInt aCmdId,
TInt aEventId,
CAiwGenericParamList& aEventParamList,
const CAiwGenericParamList& aInParamList);
...

Реализация метода HandleNotifyL() может выглядеть так:

TInt CMyConsumerApp::HandleNotifyL(
TInt /*aCmdId*/,
TInt aEventId,
CAiwGenericParamList& /*aEventParamList*/,
const CAiwGenericParamList& /*aInParamList*/)
{
// При необходимости здесь можно проверить код сервисной команды (aCmdId).
 
// Проверка значения события.
switch (aEventId)
{
case KAiwEventCanceled:
{
// Обработка отмены...
break;
}
case KAiwEventCompleted:
{
// Обработка завершения...
break;
}
...
// Здесь можно обрабатывать другие события.
...
default:
break;
}
 
return KErrNone;
}

Асинхронный вызов команды сервиса может быть выполнен следующим образом:

void CMyConsumerApp::HandleCommandL(TInt aCommand)
{
...
// Асинхронное выполнение команды сервиса меню AIW. Не забудьте проверить в
// документации провайдера, поддерживает ли он асинхронную обработку команд.
// В этом примере не использованы входящие и исходящие параметры. Убедитесь
// что они не требуются провайдеру (см. документацию).
iServiceHandler->ExecuteMenuCmdL(
aCommand, // Команда меню
iServiceHandler->InParamListL(), // Нет входящих параметров
iServiceHandler->OutParamListL(), // Нет исходящих параметров
KAiwOptASyncronous, // Требуется асинхронная обработка
this ); // Указатель на MAiwNotifyCallback
...

Демонстрационный проект

File:AIWConsumerBasics.zip

Известные проблемы

Внутренние ссылки

This page was last modified on 16 December 2011, at 06:55.
116 page views in the last 30 days.
Nokia Developer aims to help you create apps and publish them so you can connect with users around the world.

京ICP备05048969号  © Copyright Nokia 2013 All rights reserved