Android 10.0 设备唯一码

kotlin 工具类
object DeviceUtil {
  
  /**
   * 退出 APP
   */
  fun exitApp() {
    Timer().schedule(500) {
      //获取PID,目前获取自己的也只有该API,否则从/proc中自己的枚举其他进程吧,不过要说明的是,结束其他进程不一定有权限,不然就乱套了。// 建议使用
      Process.killProcess(Process.myPid())
    }
  }
  
  /**
   * 获取设备唯一 ID
   * @param context 上下文
   * @return 设备唯一 ID
   */
  fun getUniqueId(context: Context): String {
    // 不选用需要权限的获取 ID 方式
    val data = getAndroidId(context) + getSerialNumber() + getUniquePsuedoId() + getUuid(context)
    return EncryptUtil.md5(data).toUpperCase(Locale.CHINA)
  }
  
  /**
   * 获取 UUID
   * @param context 上下文
   */
  private fun getUuid(context: Context): String {
    // UUID 键
    val key = "key_uuid"
    // 获取 SharedPreferences
    val preferences = PreferenceManager.getDefaultSharedPreferences(context)
    // 获取 UUID
    var uuid: String? = preferences.getString(key, "")
    // UUID 为空值
    if (uuid.isNullOrEmpty()) {
      // 创建新的 UUID
      uuid = UUID.randomUUID().toString()
      // 保存
      preferences?.edit()?.putString(key, uuid)?.apply()
    }
    debug("uuid: $uuid")
    return uuid
  }
  
  /**
   * 获取 Android ID
   * @param context 上下文
   * @return androidId
   */
  private fun getAndroidId(context: Context): String =
      Settings.System.getString(context.contentResolver, Settings.System.ANDROID_ID)
  
  /**
   * 获取序列号
   * @return 序列号
   */
  private fun getSerialNumber(): String = Build.SERIAL
  
  /**
   * 伪 IMEI
   * @return 伪 IMEI
   */
  private fun getUniquePsuedoId(): String? =
      "35" +
          Build.BOARD.length % 10 +
          Build.BRAND.length % 10 +
          Build.CPU_ABI.length % 10 +
          Build.DEVICE.length % 10 +
          Build.DISPLAY.length % 10 +
          Build.HOST.length % 10 +
          Build.ID.length % 10 +
          Build.MANUFACTURER.length % 10 +
          Build.MODEL.length % 10 +
          Build.PRODUCT.length % 10 +
          Build.TAGS.length % 10 +
          Build.TYPE.length % 10 +
          Build.USER.length % 10 //13 digits
  
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值