Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

API Критериев AIW

From Wiki
Jump to: navigation, search
Article Metadata

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

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

Note.pngNote: :Это 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 03:55.
209 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×