如果你在你的手机装过Google Mobile Maps,你就可以发现只要你的手机能连接GPRS,即使没有GPS功能,也能定位到你手机所在的位置, 只是精度不够准确。在探讨这个原理之前,我们需要了解一些移动知识,了解什么是MNC/LAC/Cell ID。

  • Mobile Network Code(MNC)
    移动网号码,中国联通CDMA系统的MNC为03,中国移动的为00。
  • Mobile Country Code(MCC)
    移动用户所属国家代号:460
  • Location Area Code(LAC)
    地区区域码,用来划分区域,一般一个小地方就一个LAC,大地方就
  • Cell Tower ID(Cell ID)
    CellID代表一个移动基站,如果你有基站数据,查CellID你就可以知道这个基站在哪里,移动公司或者警察通过这个知道你是在哪个基站范围打的移动电话。

  这些信息有什么用呢? 通过这些信息可以知道你的手机是从哪个国家,区域和哪个基站接入移动网络的。所以有些防盗手机丢失后,会发一些类 似"MCC:460;MNC:01;LAC:7198:CELLID:24989"内容的短信到你指定号码就是这个用途,通过这些信息可以从移动查到你的 被盗手机在哪里出现过。不过知道了也没用,中国人口这么密集,就是在你身边你也不知道谁是小偷:)

  这些信息从哪里来呢,一般的手机系统都提供相应的API来获取这些信息(Tower Info),比如Window SmartPhone 或Mobile就是通过RIL.dll里的API来取得,每个手机操作系统不一样,相关的信息可以查相关资料。

  得到了这些信息,如果没有基站信息表,得到了这些信息也不知道在哪,因为只有移动运营商有相关的信息,除非你是运营商或者警察才能得到这些信息。是 不是我们就查不到相应的数据呢,当然不是,强大的Google就有,这里就要提到Google Mobile Maps API,里面囊括了比较全的基站信息,中国的也有,就是偏远地区的有没有就不知道了。Google Mobile Maps本身就是使用的这些信息,感兴趣可以试一试,没有GPS模块也能定位到你手机位置,但精度不大,取决于基站的位置离你多远。

  同样我们自己也可以开发相应的手机应用来定位,只要调用Google现成的API(Secret API)"http://www.google.com/glm/mmap“.

首先读取你自己手机的CellID和LAC。 通过Http连接发送Post请求到 http://www.google.com/glm/mmap。 传入CellID和LAC参数,从API返回基站的经纬度( Latitude/Longitude)。

另外有个可以参考的例子(windows mobile)http://www.codeproject.com/KB/mobile/DeepCast.aspx

  下面是通过j2me获取手机imei号码和cellid(基站号)的例子

  

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 {
        //获取系统信息
         String info = System.getProperty("microedition.platform");
        //获取到imei号码
         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");
        //获取索爱机子的
         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才可以取到这些数据。也就是说Midlet必须经过签名上述代码才可以工作,否则获取到的是NULL。。
下面是从别的地方看来的,没做过测试,供参考。
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,移动用户身份码。当手机开机后,在接入网络的过程中有一个注册登记的过程,系统通过控制信道将经加密算法后的参数组传送给客户,手机中的 SIM卡收到参数后,与SIM卡存储的客户鉴权参数经同样算法后对比,结果相同就允许接入,否则为非法客户,网络拒绝为此客户服务。IMSI唯一的标志了 一个SIM卡。
  IMEI: IMEI即International Mobile Equipment Identity(国际移动设备身份)的简称,也被称为串号,它唯一标志了一台移动设备,比如手机。 IMEI码一般由15位数字组成,绝大多数的GSM手机只要按下“*#06#”,IMEI码就会显示出来。其格式如下: TAC即Type Approval Code,为设备型号核准号码。FAC即Final Assembly Code,为最后装配号码。 SNR即Serial Number,为出厂序号。 SP即Spare Number,为备用号码。  

  有时候,我们在应用中需要获取IMSI或者IMEI号用于将应用程序和手机或SIM卡绑在一起。获取的方式在各不同厂商的各款手机上不尽相同,在motorola RAZR E6   上采用System.getProperty()获取。相应程序代码是:

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
  

Google Maps基站定位相关推荐

  1. GOOGLE地图基站定位-Google Mobile Maps API

    如果你在你的手机装过Google Mobile Maps,你就可以发现只要你的手机能连接GPRS,即使没有GPS功能,也能定位到你手机所在的位置, 只是精度不够准确.在探讨这个原理之前,我们需要了解一 ...

  2. Android基站定位——单基站定位(二)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8672856 基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息 ...

  3. Android Google Maps API 网络服务用于网络定位、计算路线、获取经纬度、获取详细地址等

    Google Maps API 网络服务 官网地址 : https://developers.google.com/maps/documentation/webservices/?hl=zh-cn 其 ...

  4. 手机基站定位(安卓手机定位源码)

    下面是手机基站定位代码: public class CellIDInfo {public int cellId;public String mobileCountryCode;public Strin ...

  5. Android基站定位

    Android基站定位   一.通过手机信号获取基站信息 通过TelephonyManager 获取lac:mcc:mnc:cell-id(基站信息)的解释: MCC,Mobile Country C ...

  6. Android 简单基站定位程序

    原帖地址:http://www.cnblogs.com/rayee/archive/2012/02/02/2336101.html 声明 本系列文章不是教程,仅为笔记,如有不当之处请指正. 欢迎转载, ...

  7. Google Maps API for Android 指南(一)

    概览 Android版Google API 介绍. 通过Android版的Google API,开发者可以基于Google Map的数据开发自己的APP,API将自动连接至Google Map服务器. ...

  8. maps google android版,google maps中文安卓版

    google maps中文安卓版是一款实用非常广泛的地图,oogle maps中文安卓版可让您更轻松.更快速地探索这个大千世界,数据和地理位置非常准确,深受广大网友的喜爱! google maps中文 ...

  9. Android基站定位——三基站(多基站)定位(三)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8673532 这一篇基于:Android基站定位--单基站定位(二) 阐述几个概念: ...

最新文章

  1. javascript笔记——点击按钮(或超链接)如何跳转到另外一个页面并执行目标页面的js函数...
  2. journalctl -xefu kubelet查看kubelet日志
  3. helm部署Loki
  4. nested exception is java.lang.NoClassDefFoundError: org/springframework/aop/TargetSource
  5. leetcode最小路径和 (动态规划)python
  6. MySQL触发器介绍
  7. Python中re.sub()实现替换文本字符串
  8. centos8安装MySQL依赖_centos8安装mysql8
  9. mysql排序行号_mysql 取得行号后再排序
  10. C++11并发实战(专栏)
  11. 一个react项目案例02 注册和登陆实现原理分析
  12. python题库大一_1000道Python题库系列分享三
  13. win10无法启动修复服务器,win10 bcd损坏无法开机怎样修复_win10系统bcd损坏开机进不了系统解决方法...
  14. Sublime text 设置快捷键让html文件在浏览器中打开
  15. SQL select详解(基于选课系统)
  16. 中石油布局天然气商储 天然气国家储备有望
  17. 现在网站主流排版方式
  18. scratch案例——音乐
  19. Java从输入中读取一个数组
  20. 超实平面上函数的微分定义

热门文章

  1. 服务器和超级计算机的性能,超级计算机和云服务器的区别
  2. 区块链溯源是什么?一文带您读懂!
  3. MATLAB实现地球表面上两点之间的仰角和方位角计算
  4. CentOS 7.6安装JDK8过程(通过官网下载压缩包方式)
  5. 联想台式机计算机接口,接口篇:四款产品接口配置横向对比_联想ThinkCentre台式电脑_台式电脑评测-中关村在线...
  6. powershell 启动时报错 profile.ps1 cannot be loaded because running scri
  7. 图算法入门4:活动网络-AOE网络和关键路径(critical path)
  8. Turtlebot3 buger在仿真环境下建图导航
  9. Maya---倒角命令
  10. 西门子S7-PLCSIM仿真软件的应用