Unity调用Toast

作者: MemoryC | 来源:发表于2017-09-03 22:01 被阅读0次

    原文链接:
    【游戏蛮牛】Unity3D调用Android功能与组件(一)——调用Toast
    发表于 2016-10-21 16:58:24 最后于2017-3-15 15:12 编辑

    前言

    • 前段时间有个小伙伴问我,在用Unity3D进行Android应用/游戏开发的时候,如何使用Android系统的空间和方法。我说可以用eclipse+Unity混合开发,网上也有很多相应的教程。他看了一圈之后觉得这样还是太麻烦,他想要调用的只是一些简单的东西比如Toast、分享、图库之类的,而且还会影响模块化设计,我觉得有点道理,于是打算用提供的AndroidJavaClass和AndroidJavaObject来实现Android部分简单的功能与空间调用。
    • 如果您有任何疑问或者需求,请加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、解释说明

    • a. AndroidJavaClass对应着Android里面的Java类,而AndroidJavaObject对应着Android里面实例化的对象。
    • b. 一定要切记C#里的String和Java的String不是一码事,所以调用Android方法时如果需要传字符串为参数时,不能直接给个字符串,应该给个Java里的String,例如 new AndroidJavaObject("java.lang.String","你想传的字符串");
    • c. 由于AndroidJavaClass对应的是类,所以一般用之来调用对应的类的静态变量(GetStatic<Type>)或者静态方法(CallStatic<Type>("functionName",param1,param2,....));其中的Type为返回类型,注意是Java的返回类型不是C#的,一般整型和布尔型是通用的,其他的如果不清除可以统一写返回类型为AndroidJavaObject,当然没有返回类型的不需要写Type。
    • d. AndroidJavaObject对应的是实例对象,所以用new方法给其初始化时要注意说明其是哪个类的实例对象。再比如刚才那个例子: AndroidJavaObject javaString=new AndroidJavaObject("java.lang.String","字符串的值");

    - - - - - - - - - - - - -------------------------------2017-03-15-更-新--------------------------- - - - - - - - - - - - -

    3、如果你觉得上述方法仍然麻烦,请忽略上面所有内容,往下看。

    添加脚本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
    }

    由于简书的markdown对代码支持不是很好,请自行排版(如用Mono,选中代码——>Edit——>Format——>Format Selection即可)

    • 使用方法:
      对于任意一个你想显示出来的string myString,直接调用 myString.showAsToast();就可以了,
      例如
      "Welcome to Read Artical By MemoryC".showAsToast();
      或者
      string memoryc="Welcome to Read Artical By MemoryC";
      memoryc.showAsToast();

    效附显示效果

    Toast效果图

    注意

    如宏定义所示,该扩展方法仅适用于Android平台,如果报错请先切换到Android平台,如下图。

    切换平台至Android

    技术交流:请加Q群 425377188

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

    由于游戏蛮牛对于版权保护不给力,经常出现自己辛苦发的文章被非法转载到其他论坛(不注明原文作者和链接),后续MemoryC将转战 简书。游戏蛮牛上仍然会发,但以后可能会以转载或图片形式出现。请各位码友们支持原版,转载请务必注明原文链接。写篇博客不容易,本身就是免费的福利,非法转载更让人心寒。

    相关文章

      网友评论

        本文标题:Unity调用Toast

        本文链接:https://www.haomeiwen.com/subject/xbnjjxtx.html