• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            franksunny的個人技術空間
            獲得人生中的成功需要的專注與堅持不懈多過天才與機會。 ——C.W. Wendte

             

            關于Symbian識別移動、聯通和其它運營商網絡的方法

             

            自從Symbian OSEKA2提供了強大的CTelephony,這之后很多跟網絡相關的參數都通過這個獲取,像識別目前手機是注冊的是移動還是聯通等信息網絡上傳的比較多的也是通過該方法,特別是嘯天兄在nokia論壇分享了代碼之后,網絡上大多采用其代碼,當然也包括我這樣的懶人在內,而且往往很多人都沒有注意最關鍵的原理即“國際移動用戶識別碼(IMSIInternational Mobile Subscriber Identification Number)是區別移動用戶的標志,儲存在SIM卡中,可用于區別移動用戶的有效信息。IMSIMCC、MNCMSIN組成,其中MCC為移動國家號碼,由3位數字組成,唯一地識別移動客戶所屬的國家,我國為460;MNC為網絡id,由2位數字組成,用于識別移動客戶所歸屬的移動網絡,中國移動為00,中國聯通為01;MSIN為移動客戶識別碼,采用等長11位數字構成”。具體詳見http://wiki.forum.nokia.com/index.php/%E5%8C%BA%E5%88%86%E5%BD%93%E5%89%8D%E7%94%A8%E6%88%B7SIM%E5%8D%A1%E6%98%AF%E7%A7%BB%E5%8A%A8%E8%BF%98%E6%98%AF%E8%81%94%E9%80%9A

            最近在使用該代碼時,發現假如當手機處于離線狀態下,則不論有無插SIM卡,使用嘯天兄的方法,就識別不出來了,這個應該跟CTelephony的實現有關,本人試著通過其源碼去了解了,但是貌似跟蹤到底層沒有完全公開,或者說個人看源碼能力還太弱了些。由于采用嘯天兄方法實現不了了,所以只能從上面的紅頭文件(即紅體字)尋找解決方法,雖然CTelephony::GetCurrentNetworkInfo在離線模式下失效,但是CTelephony::GetSubscriberId仍然可用,為此我們就可以通過直接分析IMSI來實現對運營商網絡的識別,至于MNC的信息,大家可以查詢http://en.wikipedia.org/wiki/Mobile_network_code,在國內的情況如下截圖:

            既然知道了如上信息,我們就可以簡單的對IMSI號進行分析了,小可對嘯天兄的代碼進行簡單修改,當然該代碼也是使用CTelephony,只能使用在EKA2平臺上,EKA1可以采用RMobilePhone::GetSubscriberId的方法來獲取IMSI,在這里也就不做展開了,具體代碼如下:

            頭文件

            /*

             * TelephonyAO.h

             *

             *  Created on: 2010-4-22

             *      Author: frank

             */

             

            #ifndef TELEPHONYAO_H_

            #define TELEPHONYAO_H_

             

            #include <e32base.h>

            #include <Etel3rdParty.h>

             

            typedef enum

            {

                   ENetWorkUnKnow,

                   ENetWorkCM,

                   ENetWorkUN,

                   ENetWorkTC,

                   ENetWorkTT,

            }TNetWorkType;

             

            class CTelephonyAO : public CActive

            {

            public:

                   static CTelephonyAO* NewL();

                   TNetWorkType GetNetWorkId();

             

            public:

                   ~CTelephonyAO();

             

            protected:

                   void DoCancel();

                   void RunL();

             

            private:

                   CTelephonyAO();

                   void ConstructL();

             

                   void GetNetWorkInfo();

             

            private:

                   CActiveSchedulerWait*                iActiveSchedulerWait;

                   CTelephony*                        pTelephony_;

                   CTelephony::TSubscriberIdV1             iSubscribId;

                   CTelephony::TSubscriberIdV1Pckg     iSubscriberIdPckg;

            };

             

            #endif /* TELEPHONYAO_H_ */

             

            實現文件

            /*

             * TelephonyAO.cpp

             *

             *  Created on: 2010-4-22

             *      Author: frank

             */

             

            #include "TelephonyAO.h"

             

            CTelephonyAO::CTelephonyAO() : CActive(EPriorityStandard), iSubscriberIdPckg(iSubscribId)

            {

                  

            }

             

            CTelephonyAO::~CTelephonyAO()

            {

                   delete pTelephony_;

                   pTelephony_ = NULL;

                   delete iActiveSchedulerWait;

                   iActiveSchedulerWait = NULL;

            }

             

            void CTelephonyAO::ConstructL()

            {

                   pTelephony_ = CTelephony::NewL();

                   iActiveSchedulerWait = new (ELeave)CActiveSchedulerWait;

                   CActiveScheduler::Add(this);

            }

             

            CTelephonyAO* CTelephonyAO::NewL()

            {

                   CTelephonyAO* pSelf = new(ELeave) CTelephonyAO;

                   CleanupStack::PushL(pSelf);

                   pSelf->ConstructL();

                   CleanupStack::Pop();

                   return pSelf;

            }

             

            void CTelephonyAO::RunL()

            {

             

                   if (iActiveSchedulerWait->IsStarted())

                   {

                          iActiveSchedulerWait->AsyncStop();

                   }

            }

             

            void CTelephonyAO::DoCancel()

            {

                   pTelephony_->CancelAsync(CTelephony::EGetSubscriberIdCancel);

                   if (iActiveSchedulerWait->IsStarted())

                   {

                          iActiveSchedulerWait->AsyncStop();

                   }

            }

             

            void CTelephonyAO::GetNetWorkInfo()

            {

                   Cancel();

                   pTelephony_->GetSubscriberId(iStatus, iSubscriberIdPckg);

                   SetActive();

                   iActiveSchedulerWait->Start();

            }

             

            TNetWorkType CTelephonyAO::GetNetWorkId()

            {

                   GetNetWorkInfo();

                   TNetWorkType vNetWorkType = ENetWorkUnKnow;

                   if(iSubscribId.iSubscriberId.Length() < 15)

                   {

                          vNetWorkType = ENetWorkUnKnow;

                   }

                   else

                   {

                          TBuf<6> vHeader;

                          vHeader.Copy(iSubscribId.iSubscriberId.Left(5));

                          TBuf<3> vPtrTemp;

                          vPtrTemp.Copy(vHeader.Right(2));

                          TInt vNetWorkId = 0;

                          TLex vLex(vPtrTemp);

                          vLex.Val(vNetWorkId);

                          if((vNetWorkId == 1) ||(vNetWorkId == 6))

                          {

                                 vNetWorkType = ENetWorkUN;

                          }

                          else if((vNetWorkId == 0) ||(vNetWorkId == 2))

                          {

                                 vNetWorkType = ENetWorkCM;

                          }

                          else if((vNetWorkId == 3) ||(vNetWorkId == 5))

                          {

                                 vNetWorkType = ENetWorkTC;

                          }

                          else if(vNetWorkId == 20)

                          {

                                 vNetWorkType = ENetWorkTT;

                          }

                          else

                          {

                                 vNetWorkType = ENetWorkUnKnow;

                          }

                   }

                   return vNetWorkType;

            }

            至于如何調用,就可以通過如下簡單獲取了,不用再自己去比較了。

                   CTelephonyAO* pTelephony = CTelephonyAO::NewL();

                   CleanupStack::PushL(pTelephony);

                   TNetWorkType vNetWorkType = pTelephony->GetNetWorkId();

                   CleanupStack::PopAndDestroy(pTelephony);

            好了,暫時小結如下吧,感謝嘯天兄前人植樹。

            posted on 2010-04-22 19:13 frank.sunny 閱讀(2186) 評論(3)  編輯 收藏 引用 所屬分類: C/C++學習和實踐symbian 開發

            FeedBack:
            # re: 關于Symbian識別移動、聯通和其它運營商網絡的方法
            2010-04-23 13:05 | 99書城
            空間看見米那是美女的  回復  更多評論
              
            # re: 關于Symbian識別移動、聯通和其它運營商網絡的方法
            2010-04-24 09:13 | 羅萊家紡官方網站
            是的免費的南方  回復  更多評論
              
            # re: 關于Symbian識別移動、聯通和其它運營商網絡的方法
            2011-08-09 15:22 | wojj
            感謝你的分享!  回復  更多評論
              

            常用鏈接

            留言簿(13)

            隨筆分類

            個人其它博客

            基礎知識鏈接

            最新評論

            閱讀排行榜

            評論排行榜

            久久97久久97精品免视看| 91精品国产91久久久久福利| 国产69精品久久久久9999| 亚洲国产精品久久久久婷婷软件 | 国产精品18久久久久久vr| 国产精品美女久久久m| 91精品无码久久久久久五月天| 久久久久久久久久免免费精品 | 久久九色综合九色99伊人| 久久亚洲AV无码精品色午夜| 国产精品99久久99久久久| 欧美日韩精品久久久久| 久久亚洲精品中文字幕| 国产午夜精品理论片久久| 久久久久99精品成人片试看| 青青草国产97免久久费观看| 好久久免费视频高清| 久久亚洲国产精品成人AV秋霞 | 欧美激情精品久久久久| 久久精品国产99国产精品导航| 色综合久久中文综合网| 青草国产精品久久久久久| 欧美国产成人久久精品| 久久久青草青青国产亚洲免观| 丰满少妇人妻久久久久久| 久久精品免费一区二区| 色综合合久久天天给综看| 国产精品美女久久久免费 | 久久人人爽人人爽人人片AV麻豆| 国产欧美久久久精品| 成人久久综合网| 国产精品久久久久久久久| 99精品久久精品| 丰满少妇人妻久久久久久| 久久精品国产亚洲AV麻豆网站| 精品国产99久久久久久麻豆| 老男人久久青草av高清| 久久人人爽人人爽人人av东京热| 亚洲国产精品无码久久青草 | 青青青伊人色综合久久| 久久九九有精品国产23百花影院|