//选择默认的接入点 aIapType接入点的类型 得到对应的接入点aIapId
void ***Engine::SetDefaultIap(TInt aIapType, TUint32 &aIapId)
{
TBuf<KCommsDbSvrMaxColumnNameLength> apnName;
TBuf<10> defApn;
TUint32 fakeIapId;
aIapId = 0;
if(aIapType == 0)
defApn = _L("net");//这里最好写成net,因为联通的卡不是cmnet
else if(aIapType == 1)
defApn = _L("wap");//这里最好写成WAP,因为联通的卡不是cmwap
else if(aIapType == 2) //模拟器
defApn = _L("Winsock");
int temp = -1;
TBuf<64> Name;
TUint32 id = 0;
CCommsDatabase* CommDb = CCommsDatabase::NewL(EDatabaseTypeIAP);
CleanupStack::PushL(CommDb);
//先在OUTGOING_GPRS表里查找
CCommsDbTableView* tableIAP = CommDb->OpenTableLC(TPtrC(OUTGOING_GPRS));
if (tableIAP->GotoFirstRecord() == KErrNone)
{
do
{
TBuf<64> bufApn;
tableIAP->ReadTextL(TPtrC(GPRS_APN),bufApn);
tableIAP->ReadTextL(TPtrC(COMMDB_NAME), Name);
tableIAP->ReadUintL(TPtrC(COMMDB_ID), id);
if (bufApn.FindF(defApn) != -1)
{
temp = id;
break;
}
}
while (tableIAP->GotoNextRecord() == KErrNone);
}
CleanupStack::PopAndDestroy(); // view
TBuf<128> CommDBNamename;
//再在IAP表里查找,根据上一个表查到的NAME来查出IAP ID
CCommsDbTableView* view = CommDb->OpenTableLC(TPtrC(IAP));
int err = view->GotoFirstRecord();
while (err == KErrNone)
{
view->ReadUintL(TPtrC(COMMDB_ID), id); //接入点ID
view->ReadTextL(TPtrC(COMMDB_NAME), CommDBNamename);//连接名称
if (CommDBNamename.CompareF(Name) == 0)
{
temp = id;
break;
}
err = view->GotoNextRecord();
}
CleanupStack::PopAndDestroy(view);
CleanupStack::PopAndDestroy(); // db
//保存取得的IAP ID
aIapId = temp;
}
//隐藏接入点的对话框
//连接接入点时,不提示用户
TCommDbConnPref pref;
pref.SetIapId(iSelectedIap);
pref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); //联网时不出现对话框
pref.SetBearerSet(ECommDbBearerPSD);
pref.SetDirection(ECommDbConnectionDirectionOutgoing);
iConnection.Start(pref,iStatus); //异步创建隐藏IAP选择框的网络连接
//将设置的iConnection绑定 在iSession上这样使用iSession的时候就不会弹出对话框了
RHTTPConnectionInfo connInfo = iSession.ConnectionInfo();
RStringPool pool = iSession.StringPool();
// Attach to socket server
connInfo.SetPropertyL(pool.StringF(HTTP::EHttpSocketServ,
RHTTPSession::GetTable()), THTTPHdrVal(iSocketServ.Handle()));
// Attach to connection
TInt connPtr = REINTERPRET_CAST(TInt, &iConnection);
connInfo.SetPropertyL(pool.StringF(HTTP::EHttpSocketConnection,
RHTTPSession::GetTable()), THTTPHdrVal(connPtr));
以上代码在N73/N95上测试通过
Symbian IAP的选择以及接入点的隐藏
最新推荐文章于 2025-04-12 14:16:11 发布