Symbian IAP的選擇以及接入點的隱藏

//選擇默認的接入點 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上測試通過

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章