1. 程式人生 > >Unity Android Context 問題

Unity Android Context 問題

Unity Android Context 問題

Android端Context

Context到底是什麼

Context 的中文翻譯為 上下文,環境. 開發中稱之為 上下文 .

這個 上下文 可以理解成為當前物件在程式中所處的一個環境,一個與系統互動的過程.

Context 在載入資源,啟動Activity,獲取系統服務,建立View等操作都要參與.

如何獲取Context

通常我們想要獲取Context物件,主要有以下四種方法

  1. View.getContext,返回當前View物件的Context物件,通常是當前正在展示的Activity物件。
  2. Activity.getApplicationContext,獲取當前Activity所在的(應用)程序的Context物件,通常我們使用Context物件時,要優先考慮這個全域性的程序Context。
  3. ContextWrapper.getBaseContext():用來獲取一個ContextWrapper進行裝飾之前的Context,可以使用這個方法,這個方法在實際開發中使用並不多,也不建議使用。
  4. Activity.this 返回當前的Activity例項,如果是UI控制元件需要使用Activity作為Context物件,但是預設的Toast實際上使用ApplicationContext也可以。

Unity給Android傳遞上下文

專案中,Android端是作為庫,提供給Unity呼叫.

那麼,必須保證Android端中的上下文 com.unity3d.player.UnityPlayercurrentActivity

Unity端 :

AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject androidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
javaPlayer = new AndroidJavaObject("com/compilelife/mediacodecexample/MainActivity"); 
if (javaPlayer == null)
{
    Debug.Log("jianzhao javaPlayer is null!!");
}

javaPlayer.Call<int>("init", androidJavaObject);

Android端 :

void init(Activity mainActivity){
	this.context = (Context)mainActivity;
    // 後續需要context的地方就是用這個context.不然會經常出現空指標異常
}

後續需要context的地方就是用這個context.不然會經常出現空指標異常

參考文獻

Context都沒弄明白,還怎麼做Android開發?

Why does AndroidJavaClass exist?

Unity 呼叫Android中的java程式碼