探讨:通过j2me获取手机imei号码和cellid(基站号)

从网上找来的基站定位方面的资料:(摘自http://www.blogjava.net/lanfanss/archive/2008/08/11/221336.html)

首先是需要程序能够拿到基站的id,比如周边三个基站的id,同事,需要知道手机和每个基站的通讯信号的强弱,确定出手机和基站的相对位置。
为了得到经纬度,需要知道每个基站的经纬度,这个时候就牵涉到一张基站位置表。这个表是国家机密。
但是,谣言传说,这个表是流传在民间的。
因为这个表格带有法律保护色彩,所以,根据基站表格推算手机位置是违法的。
接下来,就是正规渠道,移动等运营商可以提供基站定位服务,但是,程序厂商需要和运营商谈一下接入的事情,否则,就算发送了位置获取请求给移动,但是可能什么都得不到,因为移动那边会把你放到黑名单里。

本篇是本人收集到的怎么获取手机的Imei和cellid的总结,由于这两个属性是每个厂商自己实现,故而没有统一的方法。本人收集的也不全,测试亦是不全面。放置一篇文章在这里,希望有兴趣的人多多补充。

资料来源如下:
http://web.mit.edu/21w.780/www/spring2007/guide/
http://wiki.forum.nokia.com/index.php/CS000947_-_Getting_Cell_ID_in_Java_ME
http://forums.sun.com/thread.jspa?threadID=5278668
https://developer.sonyericsson.com/message/110949

测试代码如下,当中使用了polish做适配:
package study; import javax.microedition.lcdui.Command; import javax.microedition.lcdui.CommandListener; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Displayable; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; import de.enough.polish.ui.Form; /** * * @author: zhanghongzhi [email protected] * @version: 0.1 * @time: 2008-8-10 下午01:56:17 * */ 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(); } } }

目前我手机的测试结果如下,希望大家能够补充测试结果或者指出文中纰漏之处:
夏普-sh9010c:不能够获取
sonyericsson:
     c702,k818c:能够获取imei及cellid

你可能感兴趣的:(探讨:通过j2me获取手机imei号码和cellid(基站号))