【问题标题】:Get Android Version Information获取安卓版本信息
【发布时间】:2017-07-16 04:08:40
【问题描述】:

我想从 Unity 获取 Android 版本信息。我知道SystemInfo.operatingSystem 可以用来做这件事,但它没有发布号、代号和其他信息等所有信息。

我决定使用 Android 的 Build.VERSION 类制作一个带有 Unity 的 AndroidJavaClass 类的小插件,但遇到了一个我无法解释的问题。

当我这样做时:

AndroidJavaClass("android.os.Build.VERSION");

我得到 class not found 异常。

使用时有效

AndroidJavaClass("android.os.Build$VERSION");

请注意,我将 "." 替换为 "$",现在可以找到该类。

我过去写过很多插件,以前从未遇到过这个问题。对于example,当我访问Android 的Uri 类时,我使用了AndroidJavaClass("android.net.Uri");,它起作用了。我不必将 "$" 放在 "Uri" 之前。

访问android.net.Uri 与访问android.os.Build.VERSION 有何不同?

为什么必须在 Build 和 VERSION 之间加上 "$" 才能让AndroidJavaClass 找到这个类?

顺便说一下,这里是 Build.VERSION 在 Unity 中的工作插件:

public class AndroidVersion
{
    static AndroidJavaClass versionInfo;

    static AndroidVersion()
    {
        versionInfo = new AndroidJavaClass("android.os.Build$VERSION");
    }

    public static string BASE_OS
    {
        get
        {
            return versionInfo.GetStatic<string>("BASE_OS");
        }
    }

    public static string CODENAME
    {
        get
        {
            return versionInfo.GetStatic<string>("CODENAME");
        }
    }

    public static string INCREMENTAL
    {
        get
        {
            return versionInfo.GetStatic<string>("INCREMENTAL");
        }
    }

    public static int PREVIEW_SDK_INT
    {
        get
        {
            return versionInfo.GetStatic<int>("PREVIEW_SDK_INT");
        }
    }

    public static string RELEASE
    {
        get
        {
            return versionInfo.GetStatic<string>("RELEASE");
        }
    }

    public static string SDK
    {
        get
        {
            return versionInfo.GetStatic<string>("SDK");
        }
    }

    public static int SDK_INT
    {
        get
        {
            return versionInfo.GetStatic<int>("SDK_INT");
        }
    }

    public static string SECURITY_PATCH
    {
        get
        {
            return versionInfo.GetStatic<string>("SECURITY_PATCH");
        }
    }

    public static string ALL_VERSION
    {
        get
        {
            string version = "BASE_OS: " + BASE_OS + "\n";
            version += "CODENAME: " + CODENAME + "\n";
            version += "INCREMENTAL: " + INCREMENTAL + "\n";
            version += "PREVIEW_SDK_INT: " + PREVIEW_SDK_INT + "\n";
            version += "RELEASE: " + RELEASE + "\n";
            version += "SDK: " + SDK + "\n";
            version += "SDK_INT: " + SDK_INT + "\n";
            version += "SECURITY_PATCH: " + SECURITY_PATCH;

            return version;
        }
    }
}

【问题讨论】:

    标签: c# android unity3d


    【解决方案1】:

    android.os.Build$VERSION 本身是一个内部类,因此必须附加 $ 以让 JRE 使用点号来确定包与内部类。

    拥有android.os.Build.VERSION 将意味着转到Build 包内名为VERSION 的类,而android.os.Build$VERSION 将意味着转到Build 包内Build 类内的内部类Version

    【讨论】:

    • 好的,有道理。这是否意味着 android.net.UriNOT 内部类?由于我将在该功能中制作更多插件,我如何知道一个类是否是 Android 文档中的内部类?
    • 是的,Uri 是一个完全独立的类,要知道一个内部类要么去挖掘源代码,要么只检查类本身的名称。 (parent_name).(innner_class_name)
    • 知道了。感谢您的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多