注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Simon

 
 
 

日志

 
 

Symbian 深入讨论RConnectionMonitor并用此来统计流量  

2010-06-17 01:30:29|  分类: Symbian C++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
今天来聊聊关于如何使用RConnectionMonitor来统计流量。
RConnectionMonitor被SYMBIAN封装的受不了。
大家详细看看OS 内核,把好好的一个API封装的想自杀拟的。
因为这种变态的封装使得我们好多参数都得不到,郁闷之极啊。
如果我们能得到流量,并定位到指定的程序该多好啊。

哈哈。很多事情都往往......但是总是美好的瑕想。
少费话了,看我们如何应用RConnectionMonitor这个来统计流量吧。

我们先来看看RConnectionMonitor这个的基本用法。
假定您已经习惯了Symbian的Observer模式。那么请先继承MConnectionMonitorObserver吧

//初始化
void CMonitorNetWork::ConstructL()
    {
    TInt err = iConnMon.ConnectL();
    iConnMon.NotifyEventL(*this);
    }

//当发生所有事件时,都可以回调到这里
//比如新的连接,连接断开时都会回调
void CMonitorNetWork::EventL( const CConnMonEventBase &aEvent )
    {
    case EConnMonCreateConnection:
        {
        TUint connectionId = eventCreate->ConnectionId();
        //所有的新建的连接都会回调到这里
        //我们可以得到连接的索引
        //那么连接的索引对于我们来说有什么作用呢?哈哈当然有作用。
        //让我们来看看下面的API。KDownlinkData哈哈是不是很惊喜可以得到下载的流量。
        //对就是这样的。让我们来分析一下这个API。
        //aConnectionId 连接索引,0 子连接,KDownlinkData 需要得到属性的值,iValue所得到的值
        //GetUintAttribute( aConnectionId, 0, KDownlinkData, iValue, iStatus);
        }
    }


//哈哈。我们搞清楚了GetUintAttribute的每一项是不是所有的事情都搞定了呢。
//当然不是,在测试中发现有时候得不到值。

void CMonitorFlow::GetDownLinkData(TUint aConnectionId)
    {
    iState = EGet;
    iMonitor.GetUintAttribute( aConnectionId, 0, KDownlinkData, iValue, iStatus);
       SetActive();
    }

//注意:在这里每1S种得到一次值,就可以得到相应的流量值了。系统刷新的比较慢。我们就忍了吧。
//再快就需要更高的能力了。郁闷吧!!!

根据以上的讨论我们就知道如何得到每个索引值的流量了。
让我们继续假想,如果我们能知道哪个索引对应于哪个应用程序是不是就知道了,哪个应用程序产生了多
少流量了呢?哈哈哈哈,当然让我们来继续看吧。Great Great Great!!
看我们能不能把最新索引对应到相应的APP吧。

让我们继续来看SDK中的API
//得到相关的属性值
//KClientInfo客户信息//太棒了是不是能取得突破呢?
GetPckgAttribute(aConnectionId,0,KClientInfo,iClient,iStatus);

void CMonitorGprs::GetIapProcess(TUint aConnectionId)
    {
    iState = EGetAppInfo;
        iConnMon.GetPckgAttribute(aConnectionId,0,KClientInfo,iClient,iStatus);
        SetActive();
    }

在RunL里取得信息
void CMonitorGprs::GetAppInfo()
    {
    RLog::LogPoor(_L("Enter GetAppInfo"));
    
     TUint k = 0;
     for ( ; k < iClient().iCount; k++ )
        {
        //在这里写LOG发现,UID就是程序对应的UID
        //似乎所有的事情都搞定了。准备庆祝一下吧!!!
        //可惜啊可惜啊。需要很高的能力。只有破解手机才能取得
        RLog::LogPoor(iClient().iUid[k].Name());
        }

     RLog::LogPoor(_L("Exit GetAppInfo"));
    }
经过以上讨论相信大家对此用法有个相当的了解了。

以上代码在N73,N95上均测试通过
  评论这张
 
阅读(375)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018