读取用户的接入点,弹出一个多行的对话框。
void CLoginContainer::GetAPNLAndDialog()
{
__UHEAP_MARK;
CDesCArray* iNameArray = new (ELeave) CDesCArrayFlat(3);
CleanupStack::PushL(iNameArray);
CCommsDatabase* db = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(db);
//get apn's name
TBuf<32> name;
TBuf<32> apn;
iNetID.Reset();
iNetApn.Reset();
TUint32 id = 0;
{
CCommsDbTableView* view = db->OpenTableLC(TPtrC(OUTGOING_WCDMA));
TInt err = view->GotoFirstRecord();
while (err == KErrNone)
{
view->ReadUintL(TPtrC(COMMDB_ID), id); //�����ID
view->ReadTextL(TPtrC(COMMDB_NAME), name);//�������
view->ReadTextL(TPtrC(GPRS_APN), apn); //��������,����ͨ������ֶ��жϽ������CMWAP����CMNET
apn.LowerCase();
iNameArray->AppendL(name);
iNetID.Append(id);
iNetApn.Append(apn);
err = view->GotoNextRecord();
}
CleanupStack::PopAndDestroy(view);
}
CleanupStack::PopAndDestroy(db);
ShowQueryDialogL(NULL, iNameArray, NULL);
CleanupStack::PopAndDestroy(iNameArray);
__UHEAP_MARKEND;
}
TInt CLoginContainer::ShowQueryDialogL(CArrayPtr<CGulIcon>* aIcons,
CDesCArray* aSelectArrray, CArrayFixFlat<TInt>* aSelectedItems)
{
CAknListQueryDialog* dlg = new (ELeave) CAknListQueryDialog(&index);
dlg->PrepareLC(R_SELECTION_QUERY);
dlg->SetItemTextArray(aSelectArrray);
for (TInt i = 0; i < aSelectArrray->Count(); i++)
{
ilog->WriteLineEnd();
ilog ->WriteTDesC16LAndToUtf8L(aSelectArrray->operator [](i));
}
dlg->SetOwnershipType(ELbmDoesNotOwnItemArray);
if (dlg->RunLD())
{
}
}
RESOURCE AVKON_LIST_QUERY r_selection_query
{
flags = EGeneralQueryFlags;
softkeys = R_AVKON_SOFTKEYS_OK_CANCEL;
items =
{
AVKON_LIST_QUERY_DLG_LINE
{
control = AVKON_LIST_QUERY_CONTROL
{
listtype = EAknCtSinglePopupMenuListBox;
listbox = AVKON_LIST_QUERY_LIST
{
};
heading = "test";
};
}
};
}
这个对话框上还遇到了一个问题,执行什么对话框都报KERN-EXEC 3的错误,由于工程中有多个hrh文件,后来整理到一个就好了。估计是哪个值重复了