unity直接调用android方法,调用TextToSpeechBeta需要引入com.goole.tts包。

using System.Collections;using System.Collections.Generic;using UnityEngine;public class IBAndroidTTS{    public delegate void DebugLog(string str);    public static event DebugLog DebugHandle;#if UNITY_ANDROID    public class TextToSpeechInitListener : AndroidJavaProxy    {        public delegate void TTSInitDelegate(int status);        private TTSInitDelegate m_TTSInitDelegate;        public TextToSpeechInitListener() : base("android.speech.tts.TextToSpeech$OnInitListener")        {        }        private void onInit(int status)        {            if (m_TTSInitDelegate != null)            {                m_TTSInitDelegate(status);            }            else            {                Debug.LogError("Init failed. Please call 'SetInitDelegate(TTSInitDelegate mTTSInitDelegate)' first");            }        }        public void SetInitDelegate(TTSInitDelegate TTSInitDelegate)        {            m_TTSInitDelegate = TTSInitDelegate;        }    }    public class TextToSpeechUtteranceCompletedListener : AndroidJavaProxy    {        public delegate void TTSUtteranceCompletedDelegate(string utteranceId);        private TTSUtteranceCompletedDelegate m_TTSUtteranceCompletedDelegate;                public TextToSpeechUtteranceCompletedListener() : base("android.speech.tts.TextToSpeech$OnUtteranceCompletedListener")        {        }        void onUtteranceCompleted(string utteranceId)        {            if (m_TTSUtteranceCompletedDelegate != null)            {                m_TTSUtteranceCompletedDelegate(utteranceId);            }            else            {                if (DebugHandle != null)                {                    DebugHandle("Init failed. Please call 'SetInitDelegate(TTSUtteranceCompletedDelegate m_TTSUtteranceCompletedDelegate)' first");                }            }        }        public void SetUtteranceCompletedDelegate(TTSUtteranceCompletedDelegate TTSUtteranceCompletedDelegate)        {            m_TTSUtteranceCompletedDelegate = TTSUtteranceCompletedDelegate;        }    }    #region singleton    private static object m_locker = new object();    protected static IBAndroidTTS m_instance;    public static IBAndroidTTS Instance    {        get        {            if (m_instance == null)            {                lock (m_locker)                {                    if (m_instance == null)                    {                        m_instance = new IBAndroidTTS();                        m_instance.Init();                    }                }            }            return m_instance;        }    }    #endregion    #region  TextToSpeech STATE    const int TextToSpeech_SUCCESS = 0;    const int TextToSpeech_LANG_MISSING_DATA = -1;    const int TextToSpeech_LANG_NOT_SUPPORTED = -2;    const int TextToSpeech_QUEUE_FLUSH = 0;    #endregion    #region Android TextToSpeech    //AndroidJavaClass    private AndroidJavaClass Locale;    private AndroidJavaClass UnityPlayer;    //AndroidJavaObject    private AndroidJavaObject m_currentActivity;    private AndroidJavaObject m_androidTTS;    private TextToSpeechInitListener m_initListener;    private TextToSpeechUtteranceCompletedListener m_utteranceCompletedListener;    private void Init()    {        Locale = new AndroidJavaClass("java.util.Locale");        m_initListener = new TextToSpeechInitListener();        m_initListener.SetInitDelegate(OnInitTTSEngine);        UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");        m_currentActivity = UnityPlayer.GetStatic("currentActivity");        m_androidTTS = new AndroidJavaObject("android.speech.tts.TextToSpeech", m_currentActivity, m_initListener);        m_utteranceCompletedListener = new TextToSpeechUtteranceCompletedListener();        m_utteranceCompletedListener.SetUtteranceCompletedDelegate(OnUtteranceCompleted);        int result = m_androidTTS.Call("setOnUtteranceCompletedListener", m_utteranceCompletedListener);        if (DebugHandle != null)        {            DebugHandle("setComplete" + result);        }    }    #endregion    private bool m_isChinese = false;    public bool IsChinese    {        get        {            return m_isChinese;        }    }    private void OnInitTTSEngine(int status)    {        if (status == TextToSpeech_SUCCESS)        {            int result = m_androidTTS.Call("setLanguage", Locale.GetStatic("CHINESE"));            if (result != TextToSpeech_SUCCESS)            {                string error = "Chinese not supported, English Mode Start Instead";                if (DebugHandle != null)                {                    DebugHandle(error);                }                //error.ShowToast();                m_androidTTS.Call("setLanguage", Locale.GetStatic("US"));            }            else            {                m_isChinese = true;            }        }    }    private void OnUtteranceCompleted(string utteranceId)    {        if (DebugHandle != null)        {            DebugHandle(utteranceId);        }    }    public void Speak(string str)    {        if (IsDone() == true)        {            m_androidTTS.Call("speak",  new AndroidJavaObject("java.lang.String", CSharpString), TextToSpeech_QUEUE_FLUSH, null, str);        }    }    public bool IsDone()    {        return !IsSpeaking();    }    public void Stop()    {        m_androidTTS.Call("stop");    }    public void SetVolume(int volume)    {        //m_androidTTS.Call("", volume);    }    public void SetRate(float rate)    {        m_androidTTS.Call("setSpeechRate", rate);    }    public void SetPitch(float pitch)    {        m_androidTTS.Call("setPitch", pitch);    }    public bool IsSpeaking()    {        return m_androidTTS.Call("isSpeaking");    }    #region TTSBeta    /**     * public class TextToSpeechBetaInitListener : AndroidJavaProxy    {        public TextToSpeechBetaInitListener() : base("com.google.tts.TextToSpeechBeta$OnInitListener")        {        }        public delegate void TTSBetaInitDelegate(int status, int versionCode);        private TTSBetaInitDelegate m_TTSBetaInitDelegate;        private void OnInit(int status, int versionCode)        {            if (m_TTSBetaInitDelegate != null)            {                m_TTSBetaInitDelegate(status, versionCode);            }            else            {                Debug.LogError("Init failed. Please call 'SetInitDelegate(TextToSpeechBetaInitListener m_TTSBetaInitDelegate)' first");            }        }        public void SetInitDelegate(TTSBetaInitDelegate TTSBetaInitDelegate)        {            m_TTSBetaInitDelegate = TTSBetaInitDelegate;        }    }    private AndroidJavaObject m_androidTTSBeta;    private TextToSpeechBetaInitListener m_betainitListener;    private void InitAndroidTextToSpeechBeta()    {       ///需要引入com.google.tts jave包       m_betainitListener = new TextToSpeechBetaInitListener();       m_betainitListener.SetInitDelegate(OnInitTTSBetaEngine);       UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");       m_currentActivity = UnityPlayer.GetStatic("currentActivity");       m_androidTTSBeta = new AndroidJavaObject ("com.google.tts.TextToSpeechBeta", m_currentActivity, m_betainitListener);           }    private void OnInitTTSBetaEngine(int status, int versionCode)    {        if (status == TextToSpeech_SUCCESS)        {            int result = m_androidTTSBeta.Call("setLanguage", Locale.GetStatic("CHINA"));            if (result != TextToSpeech_SUCCESS)            {                string error = "Chinese not supported, English Mode Start Instead";                error.ShowToast();                m_androidTTSBeta.Call("setLanguage", Locale.GetStatic("US"));            }        }    }    **/    #endregion#endif}

 

更多相关文章

  1. android 设置静态wifi地址
  2. Android(安卓)Media Server - MediaPlayer - prepare - 01
  3. Android与Webview交互
  4. Android(安卓)图片选择器
  5. Android(安卓)Menu(Context Menu,Options Menu,SubMenu)实例
  6. Android中在service中启动activity
  7. 调用所有的 android activity 的实现
  8. Android的NDK开发(1)————Android(安卓)JNI简介与调用流程
  9. android md5加密

随机推荐

  1. android中使用SQLite进行CRUD操作的实例
  2. Android的pagerAdapter源码,在线查看网址
  3. android 图片的浏览、缩放、拖动和自动居
  4. 设置 Toolbar(ActionBar) 上的按钮颜色
  5. android 安装软件
  6. Android(安卓)如何实现屏幕转换方向
  7. Android布局管理器
  8. Android(安卓)System Server
  9. 黑马android - 学习笔记
  10. 2011.08.18——— android 图片效果 Imag