zoukankan      html  css  js  c++  java
  • Symbian之IAP(Internet Access Point)(转)

    最近比较空闲,一直在优化之前的移植代码。之前拨号接口一直有那么点问题,所以今天重新看了下IAP相关的代码,总结如下。

    一般程序在使用RConnection进行拨号连接时,默认会弹出一个接入点列表框,让你选择指定的IAP进行拨号。现在很流行自绘UI,这个系统列表框就会与程序显得有点格格不入,同时也考虑用户体验的问题,有些程序就希望将这个列表框隐藏起来。想要隐藏起来,就需要程序去遍历手机里的IAP列表,并选择其中一个的IAP ID值,然后进行拨号。

    遍历有两种方法,第一种是访问数据库CommDb,需要打开IAP表,其中的COMMDB_NAME字段是连接名字,COMMDB_ID即拨号所需的IAP ID值;第二种是用一个封装好的类CApSelect,ISP类型和Bearer类型都设置为All Type,就可以调用CApSelect::Name()和CApSelect::Uid()获取每个IAP的名字和ID值。

    获取手机上的所有IAP之后,接下来就是选择具体哪一个IAP的问题了。一般拨号分cmwap和cmnet两种,wifi不在本文讨论范围之内。我看了下CApSelect提供的方法,只能获取IAP的ISP类型和Bearer类型,虽然一直没弄清楚这两个值具体是什么用的,但经测试貌似是不能作为区分cmwap和cmnet的,那么最终还是要访问数据库的。

    回顾一下代码创建一个IAP的过程,cmnet和cmwap都会创建好几个相关的表,唯一区别在于cmwap需要在PROXIES表里相关的记录中添加代理地址(10.0.0.172)和端口(80)等信息,cmnet则需要删除PROXIES表中那条相关的记录。我看了了很多网上搜索IAP的代码,基本都是两种:1、搜索IAP表中的COMMDB_NAME字段;2、搜索OUTGOING_GPRS表中的GPRS_APN字段,然后通过IAP的IAP_SERVICE字段和OUTGOING_GPRS的COMMDB_ID字段来关联两个表。一个是连接的名称,一个是接入点的名称,看其中是否有关键字“cmnet”和“cmwap”。但事实上这两个值并不是固定的,用户完全可以在设置-连接-接入点中将这两个值改写成任意的值。所以想靠名字来区分是非常不可靠的做法。有一种思路,是根据创建IAP时的不同处入手,看和OUTGOING_GPRS里每条记录所关联的PROXIES表中的记录是否存在,来区分,这个暂时还没有测试过。

    还有一种做法,就是当搜索不到名为“cmnet”和“cmwap”的IAP时,程序自动创建一个,这样以后的连接都可以使用这个IAP来拨号了。当然你得保证你的创建IAP程序是正确的。

    不过话说回来,我觉得最好的方法还是由用户自己来选择接入点,也最保险。我看了下其他四款软件,其中UcWeb、QQ2010、酷伴,拨号时都是会弹出接入点列表框的,而QQ游戏大厅的做法更好,列表框也是自绘的,这样也统一了程序UI风格。

    创建IAP的代码可以参考这个帖子:

    http://www.devdiv.net/bbs/viewthread.php?tid=24300

    至于遍历代码参考这个:

    http://hi.baidu.com/marktian/blog/item/e7faa0f0bec0eea7a50f52d0.html

  • 相关阅读:
    手把手玩转win8开发系列课程(5)
    一道百度之星编程大赛题的随笔联想·(2)
    手把手玩转win8开发系列课程(7)
    手把手玩转win8开发系列课程(10)
    一道百度之星编程大赛题的随笔联想·(1)
    手把手玩转win8开发系列课程(6)
    手把手玩转win8开发系列课程(9)
    手把手玩转win8开发系列课程(3)
    Innodb 表修复
    NoSQL之【Redis】学习(二):配置说明
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1847823.html
Copyright © 2011-2022 走看看