posts - 41,  comments - 90,  trackbacks - 0
          Google Maps基站定位
          (轉(zhuǎn)載至http://www.cnblogs.com/psunny/archive/2009/10/22/1587779.html)

          如果你在你的手機(jī)裝過Google Mobile Maps,你就可以發(fā)現(xiàn)只要你的手機(jī)能連接GPRS,即使沒有GPS功能,也能定位到你手機(jī)所在的位置, 只是精度不夠準(zhǔn)確。在探討這個(gè)原理之前,我們需要了解一些移動(dòng)知識(shí),了解什么是MNC/LAC/Cell ID。
          • Mobile Network Code(MNC)
            移動(dòng)網(wǎng)號(hào)碼,中國(guó)聯(lián)通CDMA系統(tǒng)的MNC為03,中國(guó)移動(dòng)的為00。
          • Mobile Country Code(MCC)
            移動(dòng)用戶所屬國(guó)家代號(hào):460
          • Location Area Code(LAC)
            地區(qū)區(qū)域碼,用來劃分區(qū)域,一般一個(gè)小地方就一個(gè)LAC,大地方就
          • Cell Tower ID(Cell ID)
            CellID代表一個(gè)移動(dòng)基站,如果你有基站數(shù)據(jù),查CellID你就可以知道這個(gè)基站在哪里,移動(dòng)公司或者警察通過這個(gè)知道你是在哪個(gè)基站范圍打的移動(dòng)電話。

          這些信息有什么用呢? 通過這些信息可以知道你的手機(jī)是從哪個(gè)國(guó)家,區(qū)域和哪個(gè)基站接入移動(dòng)網(wǎng)絡(luò)的。所以有些防盜手機(jī)丟失后,會(huì)發(fā)一些類 似"MCC:460;MNC:01;LAC:7198:CELLID:24989"內(nèi)容的短信到你指定號(hào)碼就是這個(gè)用途,通過這些信息可以從移動(dòng)查到你的 被盜手機(jī)在哪里出現(xiàn)過。不過知道了也沒用,中國(guó)人口這么密集,就是在你身邊你也不知道誰(shuí)是小偷:) 

            這些信息從哪里來呢,一般的手機(jī)系統(tǒng)都提供相應(yīng)的API來獲取這些信息(Tower Info),比如Window SmartPhone 或Mobile就是通過RIL.dll里的API來取得,每個(gè)手機(jī)操作系統(tǒng)不一樣,相關(guān)的信息可以查相關(guān)資料。

          得到了這些信息,如果沒有基站信息表,得到了這些信息也不知道在哪,因?yàn)橹挥幸苿?dòng)運(yùn)營(yíng)商有相關(guān)的信息,除非你是運(yùn)營(yíng)商或者警察才能得到這些信息。是 不是我們就查不到相應(yīng)的數(shù)據(jù)呢,當(dāng)然不是,強(qiáng)大的Google就有,這里就要提到Google Mobile Maps API,里面囊括了比較全的基站信息,中國(guó)的也有,就是偏遠(yuǎn)地區(qū)的有沒有就不知道了。Google Mobile Maps本身就是使用的這些信息,感興趣可以試一試,沒有GPS模塊也能定位到你手機(jī)位置,但精度不大,取決于基站的位置離你多遠(yuǎn)。

            同樣我們自己也可以開發(fā)相應(yīng)的手機(jī)應(yīng)用來定位,只要調(diào)用Google現(xiàn)成的API(Secret API)“.

        1. 首先讀取你自己手機(jī)的CellID和LAC。
        2. 通過Http連接發(fā)送Post請(qǐng)求到http://www.google.com/glm/mmap。
        3. 傳入CellID和LAC參數(shù),從API返回基站的經(jīng)緯度(Latitude/Longitude)。
        4. 另外有個(gè)可以參考的例子(windows mobile)http://www.codeproject.com/KB/mobile/DeepCast.aspx

             下面是通過j2me獲取手機(jī)imei號(hào)碼和cellid(基站號(hào))的例子

          package jizhan;
          import javax.microedition.lcdui.Command;
          import javax.microedition.lcdui.CommandListener;
          import javax.microedition.lcdui.Display;
          import javax.microedition.lcdui.Displayable;
          import javax.microedition.lcdui.Form;
          import javax.microedition.midlet.MIDlet;
          import javax.microedition.midlet.MIDletStateChangeException;

          public class GetIMEIAndCellId extends MIDlet implements CommandListener {
              
          private Command exitCommand = new Command("exit", Command.EXIT, 1);

               Form form 
          = new Form("imei and cellid");
               Display display 
          = null;

              
          public GetIMEIAndCellId() {
                   display 
          = Display.getDisplay(this);

               }


              
          protected void destroyApp(boolean arg0) {

               }


              
          protected void pauseApp() {

               }


              
          protected void startApp() throws MIDletStateChangeException {
                  
          //獲取系統(tǒng)信息
                   String info = System.getProperty("microedition.platform");
                  
          //獲取到imei號(hào)碼
                   String imei = "";
                  
          //cellid
                   String cellid = "";
                  
          //lac
                   String lac = "";
                  
          // #if polish.vendor==Sony-Ericsson
                   imei = System.getProperty("com.sonyericsson.imei");
                  
          //參考 http://forums.sun.com/thread.jspa?threadID=5278668
                  
          //https://developer.sonyericsson.com/message/110949
                   cellid = System.getProperty("com.sonyericsson.net.cellid");
                  
          //獲取索愛機(jī)子的
                   lac = System.getProperty("com.sonyericsson.net.lac");
                  
          // #else if polish.vendor==Nokia
                   imei = System.getProperty("phone.imei");
                  
          if (imei == null || "".equals(imei)) {
                       imei 
          = System.getProperty("com.nokia.IMEI");
                   }

                  
          if (imei == null || "".equals(imei)) {
                       imei 
          = System.getProperty("com.nokia.mid.imei");
                   }

                  
          //獲取到cellid
                  
          //參考http://wiki.forum.nokia.com/index.php/CS000947_-_Getting_Cell_ID_in_Java_ME
                  
          // #if polish.group==Series60
                   cellid = System.getProperty("com.nokia.mid.cellid");
                  
          // #else if polish.group==Series40
                   cellid = System.getProperty("Cell-ID");
                  
          // #endif
                  
          // #else if polish.vendor==Siemens
                   imei = System.getProperty("com.siemens.imei");
                  
          // #else if polish.vendor==Motorola
                   imei = System.getProperty("com.motorola.IMEI");
                  
          //cellid 參考 http://web.mit.edu/21w.780/www/spring2007/guide/
                   cellid = System.getProperty("CellID");
                  
          // #else if polish.vendor==Samsung
                   imei = System.getProperty("com.samsung.imei");
                  
          // #endif

                  
          if (imei == null || "".equals(imei)) {
                       imei 
          = System.getProperty("IMEI");
                   }


                  
          //展示出來
                   form.append("platforminfo:" + info);
                   form.append(
          "imei:" + imei);
                   form.append(
          "cellid:" + cellid);
                   form.setCommandListener(
          this);
                   form.addCommand(exitCommand);
                   display.setCurrent(form);
               }


              
          public void commandAction(Command cmd, Displayable item) {
                  
          if (cmd == exitCommand) {
                       destroyApp(
          false);
                       notifyDestroyed();
                   }

               }


          }

            需要注意的是,必須是受信任的Midlet才可以取到這些數(shù)據(jù)。也就是說Midlet必須經(jīng)過簽名上述代碼才可以工作,否則獲取到的是NULL。。
          下面是從別的地方看來的,沒做過測(cè)試,供參考。
          a) Nokia = System.getProperty("com.nokia.mid.imei");
          System.getProperty("com.nokia.IMEI");
          System.getProperty("phone.imei");
          b) Samsung
          System.getProperty("com.samsung.imei");
          c) Sony-Ericsson
          System.getProperty("com.sonyericsson.imei");

          IMSI: IMSI全稱是International Mobile Subscriber Identification Number,移動(dòng)用戶身份碼。當(dāng)手機(jī)開機(jī)后,在接入網(wǎng)絡(luò)的過程中有一個(gè)注冊(cè)登記的過程,系統(tǒng)通過控制信道將經(jīng)加密算法后的參數(shù)組傳送給客戶,手機(jī)中的 SIM卡收到參數(shù)后,與SIM卡存儲(chǔ)的客戶鑒權(quán)參數(shù)經(jīng)同樣算法后對(duì)比,結(jié)果相同就允許接入,否則為非法客戶,網(wǎng)絡(luò)拒絕為此客戶服務(wù)。IMSI唯一的標(biāo)志了 一個(gè)SIM卡。
          IMEI: IMEI即International Mobile Equipment Identity(國(guó)際移動(dòng)設(shè)備身份)的簡(jiǎn)稱,也被稱為串號(hào),它唯一標(biāo)志了一臺(tái)移動(dòng)設(shè)備,比如手機(jī)。 IMEI碼一般由15位數(shù)字組成,絕大多數(shù)的GSM手機(jī)只要按下“*#06#”,IMEI碼就會(huì)顯示出來。其格式如下: TAC即Type Approval Code,為設(shè)備型號(hào)核準(zhǔn)號(hào)碼。FAC即Final Assembly Code,為最后裝配號(hào)碼。 SNR即Serial Number,為出廠序號(hào)。 SP即Spare Number,為備用號(hào)碼?! ?/p>

            有時(shí)候,我們?cè)趹?yīng)用中需要獲取IMSI或者IMEI號(hào)用于將應(yīng)用程序和手機(jī)或SIM卡綁在一起。獲取的方式在各不同廠商的各款手機(jī)上不盡相同,在motorola RAZR E6   上采用System.getProperty()獲取。相應(yīng)程序代碼是:

                       String imei= System.getProperty("IMEI"); //for E6
                       if ( null == imei )
                           imei = System.getProperty("phone.IMEI");
                      
                       String imsi = System.getProperty("IMSI"); //for E6
                       if ( null == imsi )
                           imei = System.getProperty("phone.IMSI");
                      
                       g.drawString("IMEI: "+imei, 10, 50, Graphics.LEFT | Graphics.TOP);

                       g.drawString("IMSI: "+imsi, 10, 70, Graphics.LEFT | Graphics.TOP);

          參考地址:
          http://blog.csdn.net/phiger/archive/2009/07/22/4371922.aspx
          http://hi.baidu.com/lfcomputer/blog/item/0520e0d37a410a3c970a16c1.html
          http://wiki.forum.nokia.com/index.php/CS000947_-_Getting_Cell_ID_in_Java_ME
          posted on 2009-12-03 16:30 天狼 閱讀(2989) 評(píng)論(4)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 陵川县| 广宗县| 义马市| 万源市| 客服| 辽阳市| 南昌县| 昌邑市| 巴南区| 应城市| 嘉定区| 五大连池市| 伽师县| 德昌县| 嘉祥县| 黄大仙区| 绥江县| 宜阳县| 盖州市| 茶陵县| 行唐县| 南平市| 泸州市| 古浪县| 广平县| 绥棱县| 嘉兴市| 汕头市| 靖西县| 江北区| 错那县| 涪陵区| 灌阳县| 松滋市| 太白县| 惠安县| 龙泉市| 改则县| 天门市| 牙克石市| 武清区|