今天來聊聊關于如何使用RConnectionMonitor來統計流量。
RConnectionMonitor被SYMBIAN封裝的受不了。
大家詳細看看OS 內核,把好好的一個API封裝的想自殺擬的。
因為這種變態的封裝使得我們好多參數都得不到,郁悶之極啊。
如果我們能得到流量,并定位到指定的程序該多好啊。
哈哈。很多事情都往往......但是總是美好的瑕想。
少費話了,看我們如何應用RConnectionMonitor這個來統計流量吧。
我們先來看看RConnectionMonitor這個的基本用法。
假定您已經習慣了Symbian的Observer模式。那么請先繼承MConnectionMonitorObserv
er吧
//初始化
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種得到一次值,就可以得到相應的流量值了。系統刷新的比較慢。我們就忍了吧。