Unity調(diào)用Toast

原文鏈接:
【游戲蠻畔趵茫】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();

效附顯示效果

Toast效果圖

注意

如宏定義所示家制,該擴(kuò)展方法僅適用于Android平臺(tái),如果報(bào)錯(cuò)請(qǐng)先切換到Android平臺(tái)泡一,如下圖颤殴。

切換平臺(tái)至Android

技術(shù)交流:請(qǐng)加Q群 425377188

-------------------------------------------------END--------------------------------------------------

由于游戲蠻牛對(duì)于版權(quán)保護(hù)不給力,經(jīng)常出現(xiàn)自己辛苦發(fā)的文章被非法轉(zhuǎn)載到其他論壇(不注明原文作者和鏈接)鼻忠,后續(xù)MemoryC將轉(zhuǎn)戰(zhàn) 簡(jiǎn)書(shū)涵但。游戲蠻牛上仍然會(huì)發(fā),但以后可能會(huì)以轉(zhuǎn)載或圖片形式出現(xiàn)帖蔓。請(qǐng)各位碼友們支持原版矮瘟,轉(zhuǎn)載請(qǐng)務(wù)必注明原文鏈接。寫(xiě)篇博客不容易塑娇,本身就是免費(fèi)的福利澈侠,非法轉(zhuǎn)載更讓人心寒。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埋酬,一起剝皮案震驚了整個(gè)濱河市哨啃,隨后出現(xiàn)的幾起案子烧栋,更是在濱河造成了極大的恐慌,老刑警劉巖拳球,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件审姓,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡祝峻,警方通過(guò)查閱死者的電腦和手機(jī)邑跪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)呼猪,“玉大人,你說(shuō)我怎么就攤上這事砸琅∷尉啵” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵症脂,是天一觀的道長(zhǎng)谚赎。 經(jīng)常有香客問(wèn)我,道長(zhǎng)诱篷,這世上最難降的妖魔是什么壶唤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮棕所,結(jié)果婚禮上闸盔,老公的妹妹穿的比我還像新娘。我一直安慰自己琳省,他們只是感情好迎吵,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著针贬,像睡著了一般击费。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上桦他,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天蔫巩,我揣著相機(jī)與錄音,去河邊找鬼快压。 笑死圆仔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗓节。 我是一名探鬼主播荧缘,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼拦宣!你這毒婦竟也來(lái)了截粗?” 一聲冷哼從身側(cè)響起信姓,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绸罗,沒(méi)想到半個(gè)月后意推,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡珊蟀,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年菊值,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育灸。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡腻窒,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出磅崭,到底是詐尸還是另有隱情儿子,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布砸喻,位于F島的核電站柔逼,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏割岛。R本人自食惡果不足惜愉适,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望癣漆。 院中可真熱鬧维咸,春花似錦、人聲如沸惠爽。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)疆股。三九已至费坊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旬痹,已是汗流浹背附井。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留两残,地道東北人永毅。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像人弓,于是被迫代替她去往敵國(guó)和親沼死。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評(píng)論 25 707
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線程崔赌,因...
    小菜c閱讀 6,444評(píng)論 0 17
  • 我是愛(ài)寫(xiě)作的意蛀,尚存其愛(ài)吧耸别。在我向神靈許下愿望的一刻,我想县钥,自那一刻開(kāi)始秀姐,我的書(shū)寫(xiě),多少是受過(guò)神靈保佑的天賦技能若贮,我...
    素言簡(jiǎn)說(shuō)閱讀 454評(píng)論 0 2
  • 承受了一天的累省有,晚上7點(diǎn)才下班回家。吃過(guò)晚飯很自然的拿出手機(jī)看微信有沒(méi)有客戶聯(lián)系我或者需要我關(guān)注的谴麦。鄭老師來(lái)了……...
    蔣麗萍1閱讀 213評(píng)論 0 0
  • 媛媛在大商場(chǎng)銷(xiāo)售品牌女裝蠢沿。 今天運(yùn)氣特別好,才半天時(shí)間匾效,已經(jīng)成交一萬(wàn)二千多塊錢(qián)搏予。在清點(diǎn)銷(xiāo)售小票時(shí),嬡媛恨不能吹口哨...
    會(huì)飛的果子閱讀 397評(píng)論 11 9