Получить EMUI-версию устройства программно - PullRequest
2 голосов
/ 21 апреля 2020

Как я могу получить версию EMUI во время выполнения моего приложения? Есть ли какой-нибудь системный способ получить версию EMUI?

1 Ответ

5 голосов
/ 21 апреля 2020

Это возможно через доступ к системным свойствам, таким как:

@SuppressLint("PrivateApi")
private fun Any?.readEMUIVersion() : String {
    try {
        val propertyClass = Class.forName("android.os.SystemProperties")
        val method: Method = propertyClass.getMethod("get", String::class.java)
        var versionEmui = method.invoke(propertyClass, "ro.build.version.emui") as String
        if (versionEmui.startsWith("EmotionUI_")) {
            versionEmui = versionEmui.substring(10, versionEmui.length)
        }
        return versionEmui
    } catch (e: ClassNotFoundException) {
        e.printStackTrace()
    } catch (e: NoSuchMethodException) {
        e.printStackTrace()
    } catch (e: IllegalAccessException) {
        e.printStackTrace()
    } catch (e: InvocationTargetException) {
        e.printStackTrace()
    }
    return ""
}

Однако это частный Api, и если он не подходит в вашем случае, вы можете использовать этот обходной путь (будет работать для EMUI 9 и 10, но определенно не подходит для EMUI 5 или ниже (~ android 7)):

@TargetApi(3)
fun Any?.extractEmuiVersion() : String {
    return try {
        val line: String = Build.DISPLAY
        val spaceIndex = line.indexOf(" ")
        val lastIndex = line.indexOf("(")
        if (lastIndex != -1) {
            line.substring(spaceIndex, lastIndex)
        } else line.substring(spaceIndex)
    } catch (e: Exception) { "" }
}

Любые предложения по улучшению ответа приветствуются!

...