2017-07-16 153 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