인디노트

Android 장치의 UUID 같은것을 가져오는 기능의 코드 스니펫 본문

소스 팁/Java, Android, Kotlin

Android 장치의 UUID 같은것을 가져오는 기능의 코드 스니펫

인디개발자 2021. 7. 13. 11:36

Android, Kotlin

object UniqueID {

    @SuppressLint("MissingPermission", "HardwareIds")
    fun getDeviceID(context: Context) : String {
        val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        return telephonyManager.deviceId
    }

    @SuppressLint("MissingPermission", "HardwareIds")
    fun getSimSerialNumber(context: Context): String{
        val telephonyManager = context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
        return telephonyManager.simSerialNumber
    }

    @SuppressLint("HardwareIds")
    fun getAndroidID(context: Context): String {
        return Settings.Secure.getString(context.contentResolver, Settings.Secure.ANDROID_ID)
    }

    fun getWidevineID(): String {
        val WIDEVINE_UUID = UUID(-0x121074568629b532L, -0x5c37d8232ae2de13L)

        val wvDrm = try {
            MediaDrm(WIDEVINE_UUID)
        } catch (e: UnsupportedSchemeException) {
            //WIDEVINE is not available
            null
        }

        val widevineId = wvDrm!!.getPropertyByteArray(MediaDrm.PROPERTY_DEVICE_UNIQUE_ID)
        val encodedWidevineId = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            Base64.getEncoder().encodeToString(widevineId).trim()
        } else {
            TODO("VERSION.SDK_INT < O")
        }

        return encodedWidevineId
    }

    private val digits = "0123456789ABCDEF"

    fun bytesToHex(byteArray: ByteArray): String {
        val hexChars = CharArray(byteArray.size * 2)
        for (i in byteArray.indices) {
            val v = byteArray[i].toInt() and 0xff
            hexChars[i * 2] = digits[v shr 4]
            hexChars[i * 2 + 1] = digits[v and 0xf]
        }
        return String(hexChars)
    }

    fun hashSHA256(msg: String): String {
        val hash: ByteArray
        try {
            val md = MessageDigest.getInstance("SHA-256")
            md.update(msg.toByteArray())
            hash = md.digest()
        } catch (e: CloneNotSupportedException) {
            throw DigestException("couldn't make digest of partial content");
        }

        return bytesToHex(hash)
    }

    fun uuid(msg: String): UUID? {
        val hash: ByteArray
        try {
            val md = MessageDigest.getInstance("SHA-256")
            md.update(msg.toByteArray())
            hash = md.digest()
        } catch (e: CloneNotSupportedException) {
            throw DigestException("couldn't make digest of partial content");
        }

        return nameUUIDFromBytes(hash)
    }

    fun GetAppName(context: Context): String = context.applicationInfo.loadLabel(context.packageManager).toString()

    fun GetAppVersion(context: Context): String {
        var version = ""
        try {
            val pInfo = context.packageManager.getPackageInfo(context.packageName, 0)
            version = pInfo.versionName
        } catch (e: PackageManager.NameNotFoundException) {
            e.printStackTrace()
        }

        return version
    }
}
반응형
Comments