Android设备唯一标识小记

本文介绍了Android设备的各种唯一标识,包括IMEI、ANDROID_ID、IMSI、序列号和MAC地址。IMEI适用于有通信功能的设备,而ANDROID_ID在恢复出厂设置后可能会变化。由于MAC地址可被修改,不推荐作为唯一标识。建议结合IMEI和序列号生成设备的唯一标识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

权限:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" />

测试设备:
小米pad2,HTCd816t(有卡),华为4c(无卡),vivo X6L(无卡)

1.IMEI
IMEI(International Mobile Equipment Identity,移动设备国际识别码,又称为国际移动设备标识)是手机的唯一识别号码。

IMEI针对手机(有没有手机卡都能获取),pad上不适用,亲测小米pad返回null
(根据通信制式不同,可能是IMEI,MEID,ESN)
代码:

/**
    Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available.
 */
private String getIMEI() {
        TelephonyManager telephonyManager = (TelephonyManager) this
                .getSystemService(Context.TELEPHONY_SERVICE);
        String IMEI = telephonyManager.getDeviceId();
        return IMEI;
    }

2.ANDROID_ID
16进制的64位字符,恢复出厂设置时,此值可能改变(官方文档有注释,如下)
获取方式:

/**
   A 64-bit number (as a hex string) that is randomly
   generated when the user first sets up the device and should remain
   constant for the lifetime of the user's device. The value may
   change if a factory reset is performed on the device.
*/
private String getAndroidId(){
        return Settings.Secure.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
    }

3.IMSI
国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志
没有手机卡返回null
手机卡手机通讯的唯一标识
获取方法:

private String getIMSI() {
        TelephonyManager telephonyManager = (TelephonyManager) this
                .getSystemService(Context.TELEPHONY_SERVICE);
        String IMSI = telephonyManager.getSubscriberId();
        return IMSI;
    }

4.序列号
android手机和pad都可以获取

String SerialNumber = android.os.Build.SERIAL;
或者
public String getSerialNum() {
        try {
            Class localClass = Class.forName("android.os.SystemProperties");
            String str = (String) localClass.getMethod("get", new Class[]{String.class, String.class}).invoke(localClass, new Object[]{"ro.serialno", "unknown"});
            return str;
        } catch (Exception localException) {
        }
        return null;
    }

5.MAC地址
不建议作为唯一标示
有些手机不root进入手机工程模式可以临时修改mac地址的值,重启之后可以恢复正常,亲测vivo X6L手机可以修改.
获取方法:

 private String getMac() {
        String macSerial = null;
        String str = "";

        try {
            Process pp = Runtime.getRuntime().exec("cat /sys/class/net/wlan0/address ");
            InputStreamReader ir = new InputStreamReader(pp.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);

            for (; null != str; ) {
                str = input.readLine();
                if (str != null) {
                    macSerial = str.trim();// 去空格
                    break;
                }
            }
        } catch (IOException ex) {
            // 赋予默认值
            ex.printStackTrace();
        }
        return macSerial;
    }

总结:
可以使用1,4作为android设备的唯一标识,也可以结合两种值组合生成唯一标识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值