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

  • 相关阅读:
    LeetCode(287)Find the Duplicate Number
    LeetCode(290) Word Pattern
    LeetCode(205)Isomorphic Strings
    LeetCode(201) Bitwise AND of Numbers Range
    LeetCode(200) Number of Islands
    LeetCode(220) Contains Duplicate III
    LeetCode(219) Contains Duplicate II
    命令行执行Qt程序
    LeetCode(228) Summary Ranges
    redis 的安装和使用记录
  • 原文地址:https://www.cnblogs.com/yaoliang11/p/1847823.html
Copyright © 2011-2022 走看看