c# - 获取安卓版本信息

标签 c# android unity3d

我想从 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找到这个类?

顺便说一句,这里是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;
        }
    }
}

最佳答案

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

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

关于c# - 获取安卓版本信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45124874/

相关文章:

android - Gradle 多模块依赖问题

java - Android Studio 重写屏幕

c# - 在 unity3d 中运行时结束协程

c# - 如果不需要继续,表达式会中断吗?

android - 启动时首次运行应用程序

用于嵌套函数的 C# RegEx

c# - 看看我是否在统一线程上

c# - ARkit 对象随相机移动而不是保持静止

c# - 为什么一个单元要测试 MVC 路由?

c# - 在 C# 中从 XML 添加/删除元素