[转载]通过j2me获取手机imei号码和cellid(基站号)

原文http://blog.163.com/www_yin/blog/static/36265243200891615141743/
资料来源如下:
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

需要注意的是,必须是受信任的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");

PS.

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);

你可能感兴趣的:(String,command,null,手机,j2me,Motorola)