原文鏈接:
【游戲蠻畔趵茫】Unity3D調(diào)用Android功能與組件(一)——調(diào)用Toast
發(fā)表于 2016-10-21 16:58:24 最后于2017-3-15 15:12 編輯
前言
- 前段時(shí)間有個(gè)小伙伴問(wèn)我帚豪,在用Unity3D進(jìn)行Android應(yīng)用/游戲開(kāi)發(fā)的時(shí)候鹏浅,如何使用Android系統(tǒng)的空間和方法魔眨。我說(shuō)可以用eclipse+Unity混合開(kāi)發(fā)攻臀,網(wǎng)上也有很多相應(yīng)的教程董济。他看了一圈之后覺(jué)得這樣還是太麻煩,他想要調(diào)用的只是一些簡(jiǎn)單的東西比如Toast管钳、分享、圖庫(kù)之類(lèi)的软舌,而且還會(huì)影響模塊化設(shè)計(jì)才漆,我覺(jué)得有點(diǎn)道理,于是打算用提供的AndroidJavaClass和AndroidJavaObject來(lái)實(shí)現(xiàn)Android部分簡(jiǎn)單的功能與空間調(diào)用佛点。
- 如果您有任何疑問(wèn)或者需求醇滥,請(qǐng)加Q群425377188交流黎比。
1.先上代碼
private void toastText(object str){
#if UNITY_ANDROID
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject currentActivity= UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");;
AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
AndroidJavaObject context =currentActivity.Call<AndroidJavaObject>("getApplicationContext");
currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", str.ToString());
Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT")).Call("show");
}
));
#endif
}
2、解釋說(shuō)明
- a. AndroidJavaClass對(duì)應(yīng)著Android里面的Java類(lèi)鸳玩,而AndroidJavaObject對(duì)應(yīng)著Android里面實(shí)例化的對(duì)象阅虫。
- b. 一定要切記C#里的String和Java的String不是一碼事,所以調(diào)用Android方法時(shí)如果需要傳字符串為參數(shù)時(shí)不跟,不能直接給個(gè)字符串颓帝,應(yīng)該給個(gè)Java里的String,例如 new AndroidJavaObject("java.lang.String","你想傳的字符串");
- c. 由于AndroidJavaClass對(duì)應(yīng)的是類(lèi)窝革,所以一般用之來(lái)調(diào)用對(duì)應(yīng)的類(lèi)的靜態(tài)變量(GetStatic<Type>)或者靜態(tài)方法(CallStatic<Type>("functionName",param1,param2,....));其中的Type為返回類(lèi)型购城,注意是Java的返回類(lèi)型不是C#的,一般整型和布爾型是通用的虐译,其他的如果不清除可以統(tǒng)一寫(xiě)返回類(lèi)型為AndroidJavaObject瘪板,當(dāng)然沒(méi)有返回類(lèi)型的不需要寫(xiě)Type。
- d. AndroidJavaObject對(duì)應(yīng)的是實(shí)例對(duì)象漆诽,所以用new方法給其初始化時(shí)要注意說(shuō)明其是哪個(gè)類(lèi)的實(shí)例對(duì)象侮攀。再比如剛才那個(gè)例子: AndroidJavaObject javaString=new AndroidJavaObject("java.lang.String","字符串的值");
- - - - - - - - - - - - -------------------------------2017-03-15-更-新--------------------------- - - - - - - - - - - - -
3、如果你覺(jué)得上述方法仍然麻煩拴泌,請(qǐng)忽略上面所有內(nèi)容魏身,往下看。
添加腳本MemoryCString.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// Discription:A String Extension Powered byMemoryC
/// Functions: extension a string text to showAsToast, toJavaString, or Speak out
/// CopyRight:MemoryC
/// Time:2017.02.15
/// </>
/// </summary>
public static class MemoryCString {
#if UNITY_ANDROID
/// <summary>
/// Show String as Toast.
/// </summary>
/// <param name="text">Text.</param>
/// <param name="activity">Activity.</param>
public static void showAsToast(this string text ,AndroidJavaObject activity=null){
Debug.Log (text);
if (activity == null) {
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
activity= UnityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
}
AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
AndroidJavaObject context =activity.Call<AndroidJavaObject>("getApplicationContext");
activity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text);
Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString, Toast.GetStatic<int>("LENGTH_SHORT")).Call("show");
}
));
}
public static AndroidJavaObject toJavaString(this string CSharpString){
return new AndroidJavaObject ("java.lang.String", CSharpString);
}
#endif
}
由于簡(jiǎn)書(shū)的markdown對(duì)代碼支持不是很好蚪腐,請(qǐng)自行排版(如用Mono箭昵,選中代碼——>Edit——>Format——>Format Selection即可)
-
使用方法:
對(duì)于任意一個(gè)你想顯示出來(lái)的string myString,直接調(diào)用 myString.showAsToast();就可以了回季,
例如
"Welcome to Read Artical By MemoryC".showAsToast();
或者
string memoryc="Welcome to Read Artical By MemoryC";
memoryc.showAsToast();
效附顯示效果
注意
如宏定義所示家制,該擴(kuò)展方法僅適用于Android平臺(tái),如果報(bào)錯(cuò)請(qǐng)先切換到Android平臺(tái)泡一,如下圖颤殴。
技術(shù)交流:請(qǐng)加Q群 425377188
-------------------------------------------------END--------------------------------------------------