2019年1月25日 星期五

Unity開啟隱藏icon的App

此篇分兩個部分:1.安裝app後icon會隱藏起來 2.Unity喚起隱藏icon的app



一、隱藏app的icon
  1.開啟AndroidManifest.xml檔案,將 LAUCHER 改成 DEFAULT。
      這樣在手機裡安裝後就不會在出現icon了!

二、Unity喚起隱藏icon的app
  下面會提到兩個app,A是用來開啟的app,B是隱藏icon的app。
  1.B在隱藏icon後,在AndroidManifest.xml也要加入開啟的路徑跟名稱
  2.A要加入開啟app的程式碼,需要使用Android底層的程式碼,有兩種做法:1.將Android的程式碼匯出成jar包,放入Unity提供使用。2.使用Unity提供的AndroidJavaObject直接呼叫Android的程式碼,但麻煩的是要把java的程式碼轉換成C#使用。
     這裡使用的是第2種方法:
     (1).使用AndroidJavaObject的類型
private static AndroidJavaObject currentActivity
{
  get
  {
     return new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic("currentActivity");
  }
}
     (2).開啟app的程式碼(已從java轉成c#寫法)
//使用Uri執行app
public void NextStartAppByUri()
{
  if (Application.platform != RuntimePlatform.Android)
    return;;
  //設定開啟時要傳遞的參數
  string no = ctrlPlayer.Instance().PlayerNo.ToString();
  string account = ctrlPlayer.Instance().PlayerId;
  string password = ctrlPlayer.Instance().PlayerPassword;
  string sendparameter = "player_no=" + no + "&" + "player_account=" + account + "&" + "password=" + password + "&" + "ip=" + ctrlPlayer.Instance().GuestUrl;

  Debug.Log("sendparameter = " + sendparameter);
        
  AndroidJavaObject intent_obj = null;
  try
  {
     var Intent_class = new AndroidJavaClass("android.content.Intent");
     var ACTION_VIEW = Intent_class.GetStatic("ACTION_VIEW");
     var CATEGORY_BROWSABLE = Intent_class.GetStatic("CATEGORY_BROWSABLE");
     var CATEGORY_DEFAULT = Intent_class.GetStatic("CATEGORY_DEFAULT");

     intent_obj = new AndroidJavaObject("android.content.Intent");
     intent_obj.Call("setAction", ACTION_VIEW);
     intent_obj.Call("addCategory", CATEGORY_BROWSABLE);
     intent_obj.Call("addCategory", CATEGORY_DEFAULT);

     //Uri組成 : [scheme] :// [host][path] ? [QueryParameter] = {xxx} & [QureyParameter] = {xxx}
     var Uri = new AndroidJavaClass("android.net.Uri");

     var NameUri = Uri.CallStatic("parse", "OpenGameApp://start/game" + gameID + "?" + sendparameter);
     intent_obj.Call("setData", NameUri);

     currentActivity.Call("startActivity", intent_obj);
  }
  catch (System.Exception e)
  {
     Debug.Log("System.Exception = " + e);
  }
  
  currentActivity.Dispose();
  intent_obj.Dispose();

  if (isExitThisApp)
  {
     Application.Quit();
  }
}
結語:除了開啟app,當初還寫了其他的功能,像是開啟安裝介面、檢測遊戲是否安裝、app的版本等。我也是用相同的方式完成的,之後再寫另一篇介紹。當初把java轉換成c#時,遇到不少問題,上網找的資料多半是java或是不齊全,轉換的寫法也是一知半解,雖然最後硬是測試成功了。關於jar包的寫法,你可以把Android的java程式碼直接複製進去,Unity在使用的時候,一樣使用AndroidJavaObject來呼叫,但呼叫的是jar裡面定義好的API,使用上簡單許多! d(d'∀')

沒有留言:

張貼留言