获取Android版本信息

6
我希望从Unity获取Android版本信息。我知道可以使用SystemInfo.operatingSystem来实现,但它没有所有的信息,如发布号、代号和其他信息。
我决定使用Unity的AndroidJavaClass类和Android的Build.VERSION类制作一个小插件,但遇到了一个无法解释的问题。
当我执行以下操作时:
AndroidJavaClass("android.os.Build.VERSION");

我遇到了类未找到异常。

使用以下方法时,它可以正常工作

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

请注意,我用 "$" 替换了 ".",现在可以找到该类。
过去我写过很多插件,以前从未遇到过这个问题。对于 example,当我访问 Android 的 Uri 类时,我使用了 AndroidJavaClass("android.net.Uri"); ,它可以正常工作。我不必在 "Uri" 前面加上 "$"
访问 android.net.Uri 和访问 android.os.Build.VERSION 有什么不同之处?
为什么您必须在 Build 和 VERSION 之间放置 "$" 才能使 AndroidJavaClass 找到这个类?
顺便说一下,这是在 Unity 中Build.VERSION的可工作插件:
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;
        }
    }
}
1个回答

3
android.os.Build$VERSION本身是一个内部类,因此必须添加$符号,以便JRE使用点号来区分包与内部类。
如果写成android.os.Build.VERSION,意思是要进入Build包内的名为VERSION的类,而android.os.Build$VERSION则是要进入os包内的Build类中的名为Version的内部类。

好的,那很有道理。这是否意味着 android.net.Uri 不是 内部类?由于我将来会制作更多的插件,我如何从Android文档中知道一个类是否是内部类? - Programmer
是的,Uri是一个完全独立的类,要了解内部类,要么去挖掘源代码,要么只需检查类本身的名称。(父类名称)。(内部类名称) - Rod_Algonquin
明白了。谢谢你的信息。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接