通用唯一标识符 UUID (Universally Unique Identifier)通常用于软件系统中的唯一标识。UUID 是 128 位的字符序列,在 Kotlin 中,生成 UUID 非常简单,可以通过使用 java.util.UUID
类来实现。
生成随机 UUID
在 Kotlin 中生成 UUID 最简单的方法是通过 java.util.UUID
的 randomUUID()
方法生成随机 UUID,该方法返回一个随机生成的 UUID。
示例:
package cn.itmob.demo
import java.util.UUID
fun main() {
val uuid = UUID.randomUUID()
println("UUID: $uuid")
}
// 输出:UUID: 5028e59a-47a5-431a-8c8e-03695b6e1bf1
在 Android 中使用 UUID
在 Android 开发中 UUID 可用于多种目的,比如作为数据库中数据生成唯一标识符或作为用户的唯一标识符。
这里以生成 UUID 作为用户唯一标识为例:
-
使用最简单的方式生成随机 UUID 作为用户的唯一标识
package cn.itmob.demo
import java.util.UUID
fun generateDeviceUUID() = UUID.randomUUID().toString()
生成的随机 UUID 可以缓存到本地,用户升级也可以继续作为唯一标识。但是这种方式生成的 UUID 是随机的,用户卸载重新安装或清楚缓存后,需要重新生成新的 UUID。
-
使用指定的数据构造一个新的 UUID
使用固定数据构造的 UUID,即使应用重新安装或清理数据后仍然能保持不变。
package cn.itmob.demo
fun generateDeviceUUID(context: Context): String {
val androidId = Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
val serialNumber = Build.SERIAL
val uuid = UUID(androidId.hashCode().toLong(), serialNumber.hashCode().toLong())
return uuid.toString()
}
// 输出:00000000-232e-4d86-ffff-fffacf05cb4b
这里只是以 ANDROID_ID
和 SERIAL
(设备序列号)为例作为固定数据生成 UUID。
但是这种方式已经不再推荐使用:
- Android_ID 不推荐使用,因为它是永久性的唯一ID,可用于跟踪您的用户。
- Serial/序列号,在Android 8/Oreo (API 级别 26) 开始推荐使用
android.os.Build.getSerial()
方法获取,并且需要 READ_PHONE_STATE
权限。继续使用 android.os.Build.SERIAL
返回的只是 “unknown”。从 Android 10/Q(API 级别29)对于序列号的保护更加严格,需要 READ_PRIVILEGED_PHONE_STATE
权限,也就是预装应用才可以拥有读取序列号的权限。
更多关于如何生成和管理拥有唯一标识的内容参见文档: https://developer.android.com/training/articles/user-data-ids.html