//選擇默認的接入點 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的選擇以及接入點的隱藏
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.