转载自:https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/is-there-a-unique-android-device-id.md

##如何获取Android设备唯一ID?

###问题 每一个android设备都有唯一ID吗?如果有?怎么用java最简单取得呢?

###回答1(最佳)

如何取得android唯一码?

好处:

  • 1.不需要特定权限.
  • 2.在99.5% Android装置(包括root过的)上,即API => 9,保证唯一性.
  • 3.重装app之后仍能取得相同唯一值.

伪代码:

if API => 9/10: (99.5% of devices)return unique ID containing serial id (rooted devices may be different)elsereturn unique ID of build information (may overlap data - API < 9)

代码:

/**
 * Return pseudo unique ID
 * @return ID
 */public static String getUniquePsuedoID() {// If all else fails, if the user does have lower than API 9 (lower// than Gingerbread), has reset their device or 'Secure.ANDROID_ID'// returns 'null', then simply the ID returned will be solely based// off their Android device information. This is where the collisions// can happen.// Thanks http://www.pocketmagic.net/?p=1662!// Try not to use DISPLAY, HOST or ID - these items could change.// If there are collisions, there will be overlapping dataString m_szDevIDShort = "35" + (Build.BOARD.length() % 10) + (Build.BRAND.length() % 10) + (Build.CPU_ABI.length() % 10) + (Build.DEVICE.length() % 10) + (Build.MANUFACTURER.length() % 10) + (Build.MODEL.length() % 10) + (Build.PRODUCT.length() % 10);// Thanks to @Roman SL!// http://stackoverflow.com/a/4789483/950427// Only devices with API >= 9 have android.os.Build.SERIAL// http://developer.android.com/reference/android/os/Build.html#SERIAL// If a user upgrades software or roots their device, there will be a duplicate entryString serial = null;try {serial = android.os.Build.class.getField("SERIAL").get(null).toString();// Go ahead and return the serial for api => 9return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();} catch (Exception exception) {// String needs to be initializedserial = "serial"; // some value}// Thanks @Joe!// http://stackoverflow.com/a/2853253/950427// Finally, combine the values we have found by using the UUID class to create a unique identifierreturn new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();}

###回答2 好处:

  • 1.不需要特定权限.
  • 2.在100% Android装置(包括root过的)上,保证唯一性.

坏处

  • 1.重装app之后不能取得相同唯一值.
private static String uniqueID = null;
private static final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";public synchronized static String id(Context context) {if (uniqueID == null) {SharedPreferences sharedPrefs = context.getSharedPreferences(PREF_UNIQUE_ID, Context.MODE_PRIVATE);uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);if (uniqueID == null) {uniqueID = UUID.randomUUID().toString();Editor editor = sharedPrefs.edit();editor.putString(PREF_UNIQUE_ID, uniqueID);editor.commit();}}return uniqueID;
}

###回答3(需要有电话卡)

好处: 1.重装app之后仍能取得相同唯一值.

代码:

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

谨记:要取得以下权限

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

stackoverflow链接: http://stackoverflow.com/questions/2785485/is-there-a-unique-android-device-id

Android 获取Device Id相关推荐

  1. Android获取设备ID号

    Android获取设备ID号 Android有多种方式可以获取设备ID,但是每一种总会有一点限制,为此,整合几种方式在一起,这样就万无一失了 public class DeviceIdFactory ...

  2. Android 获取设备ID,手机厂商,运营商,联网方式,获取系统语言,获取时区

    权限 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 安卓6.0需动态获取 ...

  3. Android 获取唯一Id

    git:GitHub - gzu-liyujiang/Android_CN_OAID: 安卓设备唯一标识解决方案,可完全替代移动安全联盟统一 SDK 闭源方案.包括国内手机厂商的开放匿名标识(OAID ...

  4. android 获取唯一Id,小小总结一下。仅供参考

    1.获取imei: 前言: 因传统的移动终端设备标识如国际移动设备识别码(IMEI)等已被部分国家认定为用户隐私的一部分, 并存在被篡改和冒用的风险,所以在Android 10及后续版本中非厂商系统应 ...

  5. android 获取设备id 崩溃,获取Android设备ID时出错

    我正在尝试在我的Android应用中检索我的adroid设备的设备ID.但是,在我的程序中添加以下行后,错误存在并且程序无法启动: String ts = Context.TELEPHONY_SERV ...

  6. android 获取蓝牙设备id_获取设备唯一ID的几种方式

    博客摘要:很简单,就是获取设备的唯一ID,直接上正文. 先来看看几种比较单一的方式: IMEI 方式:TelephonyManager.getDeviceId(): 问题 范围:只能支持拥有通话功能的 ...

  7. 关于android设备唯一区分device id的取得

    2019独角兽企业重金招聘Python工程师标准>>> 有些apk为了区分唯一设备,需要用到一个device id. 1. 取得设备的MAC address    如果用户没有通过w ...

  8. android 指定资源id,Android 通过名称获取资源ID

    当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ...

  9. android获取设备唯一标识完美解决方案

    转自:https://blog.csdn.net/aa1733519509/article/details/50053553 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码. ...

  10. 浅谈 iOS Device ID 的修改

    Dark side of the Force 最近有一篇 文章 介绍了如何实现 AppStore App 自动下载,笔者看后收获良多.不过文中只介绍了如何去模拟用户的操作来完成下载,并没有涉及抹机.I ...

最新文章

  1. Post Content_Length exceeds the limit
  2. 来自Riot 的一份游戏美术教程(二):概念图
  3. spring boot 配置
  4. 用PhotoSwipe制作相册,手势可放大
  5. linux 扫描开放的端口命令,在Linux系统中检查(扫描)开放端口的方法
  6. 第1讲 zend1.11介绍
  7. 如何有效地刷算法题?
  8. [转]vs2010 crystal report使用
  9. 深圳中技物流有限公司软件测试,国际空运
  10. 如何选择物业管理软件,五大误区需要避免
  11. csdn广告过滤油猴子(Greasemonkey)脚本(同样适用于暴力猴 tampermonkey/Violentmonkey 在浏览器Firefox/chrome都可以用,全部复制粘贴即可)
  12. 点击按钮复制到剪切板
  13. Linux | 如何通过Xshell上传文件到Linux
  14. xp sp3关闭PAE(物理内存扩展)
  15. Taichi安装与应用
  16. 喜讯:盘古开源荣获多项数据存储行业荣誉奖项
  17. HDU-6555 The Fool
  18. 使用git和markdown制作电子书(一)
  19. 超级详细的project2019专业版下载安装激活教程和激活码
  20. 因误删文件导致CentOS7开机卡死无法进入图形登录界面

热门文章

  1. 如何安装HDDM,无法使用HDDM
  2. logistic混沌 matlab,混沌映射(序列)matlab算法“小全”:Logistic、Henon、帐篷、kent(含混沌二值图像生成函数)...
  3. 严蔚敏《数据结构》——线索二叉树
  4. 学计算机独显重要吗,“集显”、“独显”对于普通电脑用户来说还那么重要吗?...
  5. 优联键盘linux驱动,一个坚决不用樱桃轴的优联84客制化键盘
  6. 报价单和价目表制作的软件app
  7. CIKM 2019 挑战杯「用户行为预测」冠军方案:层次GNN模型在推荐中的应用
  8. Ubuntu进行apt-get出现Package xxx is not available,but is referred to by another package错误
  9. 网络编程工程实训(DVB+CentOS+libpcap+分析帧格式)
  10. 三哥新发现了比金星还厉害的飞行物