Android开发获取唯一设备ID

Android 是否有唯一的设备ID,如果有的话,该怎样快速有效获取?
 
Settings.Secure#ANDROID_ID 返回Android ID ,是一个64位的16进制字符串
private String android_id = Secure.getString(getContext().getContentResolver(),Secure.ANDROID_ID);
 关于这个问题有很多的答案,不过其中大部分将只能算是答对了一部分,还不够好。
 根据我在很多设备上的测试(所有的电话,至少有一个是无效的)
 
所有设备针对 TelephonyManager.getDeviceId() 测试都有返回值
所有GSM设备(都有SIM卡)针对 TelephonyManager.getSimSerialNumber() 测试都有返回值
所有CDMA设备针对 getSimSerialNumber() 测试返回 NULL(预期中的)
所有有谷歌帐户的设备都返回了 ANDROID_ID 值
所有的CDMA设备针对 ANDROID_ID 和 TelephonyManager.getDeviceId() 都返回相同的值(或派生自同一个值) - 前提是安装过程中已经添加了谷歌帐户。
我还没有机会测试没有SIM卡的GSM设备,没有谷歌账户的GSM设备,以及任何在飞行模式下的设备。
所以,如果你想要得到设备本身的唯一值, TM.getDeviceId()应该是足够了。不过显然的,有些用户比其他人更加偏执一些,可以将这些标识中的一个或者多个进行hash运算就很有用,生成的字符串仍然可以唯一标识该设备,但是不会明确的标识实际的设备。例如,使用String.hashCode(),再加上一个UUID:
final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE); 
final String tmDevice, tmSerial, androidId;
tmDevice= ""+ tm.getDeviceId();
tmSerial= ""+ tm.getSimSerialNumber();
androidId= ""+ android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);
UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode()<< 32)| tmSerial.hashCode());
String deviceId = deviceUuid.toString();



结果可能类似 :00000000-54b3-e7c7-0000-000046bffd97
 
对我来说这种方式已经足够了
 
别忘了增加权限,用于读取 TelephonyManager properties,在manifest 中增加下面一行:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值