2017-07-16 115 views
1

我想从Unity获取Android版本信息。我知道SystemInfo.operatingSystem可以用来做到这一点,但它没有所有的信息,如版本号,代号和其他信息。获取Android版本信息

我决定用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在统一的工作插件:

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

android.os.Build$VERSION本身是一个内部类,因此必须追加$让JRE使用点标志来确定包与内在的阶级。

有它android.os.Build.VERSION将意味着要到一个叫VERSIONBuild包中的类,而android.os.Build$VERSION将意味着进入一个内部类Versionos

+0

好内部的Build类中,这是有道理的。这是否意味着['android.net.Uri'](https://developer.android.com/reference/android/net/Uri.html)是** NOT **内部类?由于我将在该功能中制作更多插件,我如何知道某个类是否是Android文档中的内部类? – Programmer

+0

是的,Uri是一个完全独立的类,要知道内部类是去挖掘源代码或只是检查类本身的名称。 (parent_name)。(innner_class_name) –

+0

明白了。谢谢(你的)信息。 – Programmer