Доступные модули определения местоположения
Метаданные
Статья
Перевод:
Оригинал: Available positioning modules
Последнее редактирование: hamishwillee
(09 Dec 2011)
Следующий фрагмент кода демонстрирует, как получить список доступных модулей позиционироания.
Необходимые заголовочные файлы:
- lbs.h
Библиотеки:
- lbs.lib
- bafl.lib - для работы с массивом CDesCArrayFlat
// сервер позиционирования
RPositionServer posServer;
User :: LeaveIfError( posServer.Connect() );
CleanupClosePushL( posServer );
// получение UID'а модуля позиционирования по умолчания
TPositionModuleId defModuleUid;
User :: LeaveIfError( posServer.GetDefaultModuleId( defModuleUid ) );
// получение количества доступных модулей позиционирования
TUint numOfModules = 0;
User :: LeaveIfError( posServer.GetNumModules( numOfModules ) );
if( numOfModules )
{
// массив для хранения списка
CDesCArrayFlat* itemArray = new ( ELeave ) CDesCArrayFlat( numOfModules );
CleanupStack :: PushL( itemArray );
// строки используются для формирования элементов списка
_LIT( KDefault, "* " ); // для модуля по умолчанию
_LIT( KGeneral, "- " );
const TInt KMaxModuleNameLen = 128;
for( TUint i = 0; i < numOfModules; i++ )
{
// чтение информации текущего модуля
TPositionModuleInfo moduleinfo;
posServer.GetModuleInfoByIndex ( i, moduleinfo );
// получение имени текущего модуля
TBuf< KMaxModuleNameLen > moduleName;
moduleinfo.GetModuleName( moduleName );
// перед именем модуля добавляется маркер "*" или "-"
moduleName.Insert( 0, moduleinfo.ModuleId() == defModuleUid ?
KDefault : KGeneral );
// добавление строки в массив
itemArray->AppendL( moduleName );
}
ShowListL( itemArray );
CleanupStack :: PopAndDestroy(); // itemArray
}
CleanupStack :: PopAndDestroy(); // posServer
Использование данного фрагмента на конечном устройстве требует Location Capability.
Для отображения списка можно использовать функцию ShowListL.
Заголовочные файлы:
- aknlists.h
Библиотеки:
- avkon.lib
- eikcoctl.lib
- eikctl.lib
void YourClass :: ShowListL( CDesCArray* anArray )
{
// создание инстанции класса CEikTextListBox для списка
CEikTextListBox* list = new( ELeave ) CAknSinglePopupMenuStyleListBox;
// сохраняем указатель в стеке очистки
CleanupStack::PushL( list );
// создание инстанции CAknPopupList для отображения списка
CAknPopupList* popupList = CAknPopupList::NewL( list,
R_AVKON_SOFTKEYS_OK_EMPTY,
AknPopupLayouts::EMenuWindow );
// сохраняем указатель в стеке очистки
CleanupStack::PushL( popupList );
// инициализация списка
list->ConstructL( popupList, CEikListBox::ELeftDownInViewRect );
list->CreateScrollBarFrameL( ETrue );
list->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff,
CEikScrollBarFrame::EAuto );
// утсановка содержимого списка
CTextListBoxModel* model = list->Model();
model->SetItemTextArray( anArray );
model->SetOwnershipType( ELbmDoesNotOwnItemArray );
// отображение списка
popupList->ExecuteLD();
CleanupStack::Pop(); // popupList
CleanupStack::PopAndDestroy(); // list
}
Для Nokia N95 список может выглядеть следующим образом ( символом '*' обозначен текущий модуль по умолчанию ):
- Bluetooth GPS
* A-GPS
- Встроенный GPS
- На базе сети


(no comments yet)