Symbian IAP 浅谈

(Symbian网络接入点常用编程)2009-02-24 16:36Coastline 版权所有,转载请注明出处

今天总算静下心来把IAP弄懂了个大概,记下来记下来。:)

从CommDb中获取接入点信息:

CCommsDatabase* commsDB=CCommsDatabase::NewL(EDatabaseTypeIAP);
CCommsDbTableView* table= commsDB->OpenIAPTableViewMatchingBearerSetLC(
ECommDbBearerGPRS|ECommDbBearerWLAN, //GPRS和无线局域网
ECommDbConnectionDirectionOutgoing); //方向无所谓的,写Unknown也可以
User::LeaveIfError(table->GotoFirstRecord()); //转到第一条记录

TInt err = KErrNone;
do
{
TBuf<32> name;
TUint32 id;
table->ReadTextL(TPtrC(COMMDB_NAME), name); //获取当前接入点的名称
table->ReadUintL(TPtrC(COMMDB_ID), id); //获取当前接入点的IapId
… //do something
err = table->GotoNextRecord(); //转到下一条记录
}
while (err == KErrNone);

以上代码演示了如何遍历接入点列表,实现方式比较直接,我们也可以使用另一个包装好的类CApSelect来实现:

CCommsDatabase* CommDb = CCommsDatabase::NewL(EDatabaseTypeIAP);
CApSelect* ApSelect = CApSelect::NewLC(*CommDb, KEApIspTypeAll ,EApBearerTypeAll ,KEApSortUidAscending); //指定了ISP类型和Bearer类型,以及排序规则

if (ApSelect->MoveToFirst())
{
do
{
TPtrC a = ApSelect->Name(); //接入点名称
TUint uid = ApSelect->Uid(); //接入点IapId
//put here your IAP stuff
}
while(ApSelect->MoveNext()); //下一条记录
}

弹框让用户选择接入点

可以看到,以上两种方式几乎差不过。
感兴趣的接入点都拿到了,接下来就可以自己画列表让用户选择了。
不过如果单纯是为了让用户选择使用哪个接入点的话,完全不必像上面那样麻烦,可以借助RConnection类搞定:

RSocketServ iSocketServ;
RConnection iConnection;
User::LeaveIfError(iSocketServ.Connect());
User::LeaveIfError(iConnection.Open(iSocketServ));
TCommDbConnPref connectPref;
connectPref.SetDialogPreference(ECommDbDialogPrefPrompt); //提示用户
connectPref.SetBearerSet(ECommDbBearerWLAN | ECommDbBearerGPRS);
User::LeaveIfError(iConnection.Start(connectPref)); //同步函数,会弹出框来等待用户选择哪个接入点
//此时就建立了连接

不经用户确认进行连接

以上代码虽然简洁,但是有个问题,它等待用户选择接入点之后,立刻进行连接,如果要想单纯选择接入点而不马上进行连接,恐怕还得用土办法遍历CommDb,手工创建ListBox让用户选择并记录IapId。
得到了用户希望使用的接入点的IapId之后,就可以在需要的时候不经用户确认直接建立连接了:
TCommDbConnPref connectPref;
connectPref.SetDialogPreference(ECommDbDialogPrefDoNotPrompt); //不提示用户
connectPref.SetIapId(aIapId); //这行必须要有,如果不设置IapId的话,不管上一行设置提示还是不提示,iConnection.Start(connectPref)的时候都会弹框
connectPref.SetBearerSet(ECommDbBearerWLAN | ECommDbBearerGPRS);
User::LeaveIfError(iConnection.Start(connectPref)); //设置过IapId之后,就不会弹框了
//连接建立完毕

如何关闭连接就不说了。

修改接入点设置

接下来再说说如何修改接入点设置。就是调出真机中:工具-设置-连接-接入点 中具体某个接入点的编辑画面
使用类:CApSettingsHandler
CApSettingsHandler* settingsHandler = CApSettingsHandler::NewLC(
EFalse,
EApSettingsSelListIsListPane,
EApSettingsSelMenuNormal,
KEApIspTypeAll,
EApBearerTypeAll,
KEApSortNameAscending);
TUint32 originallyFocused(IapId);
TUint32 selectedIap(IapId);

// Show the dialog
settingsHandler->RunSettingsL(originallyFocused, selectedIap); //弹出编辑画面,同步函数
以上只是一个简单的示例,没有作后续的处理。

OK,就写到这里吧,更深入的请参考NewL上高人的大作:
http://www.newlc.com/A-few-notes-about-the-CommDb.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值