【发布时间】: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;
}
}
}
【问题讨论】: