博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TTS在fragment中的实现
阅读量:6325 次
发布时间:2019-06-22

本文共 2997 字,大约阅读时间需要 9 分钟。

TTS在fragment中的实现

public class mouFragment extends Fragment {    private EditText mWord;    TextToSpeech ttsObject;    Button speakButton;    int result;//为了方便,可以不用    String text;//为了方便,可以不用    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View v = inflater.inflate(R.layout.fragment_tanngo, container, false);        ttsObject = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {            @Override            public void onInit(int status) {                if (status == TextToSpeech.SUCCESS) {                    result = ttsObject.setLanguage(Locale.JAPANESE);                } else {                    Toast.makeText(getActivity(),                            "FEATURE NOT SUPPORTED IN YOUR DEVICE",                            Toast.LENGTH_SHORT).show();                }            }        });        mWord = (EditText) v.findViewById(R.id.tanngo_word);        speakButton = (Button) v.findViewById(R.id.speak_button);        speakButton.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                switch (v.getId()) {                    case R.id.speak_button:                        if (result == TextToSpeech.LANG_NOT_SUPPORTED || result == TextToSpeech.LANG_MISSING_DATA) {                            Toast.makeText(getActivity(),                                    "FEATURE NOT SUPPORTED IN YOUR DEVICE",                                    Toast.LENGTH_SHORT).show();                        } else {                            text = mWord.getText().toString();//一定要gettext再tostring,不然会有奇怪的东西出现                            ttsObject.speak(text, TextToSpeech.QUEUE_FLUSH, null);                        }                        break;                }            }        });        return v;    }    @Override    public void onDestroy() {        super.onDestroy();        if (ttsObject != null) {            ttsObject.stop();            ttsObject.shutdown();        }    }}

废话不多说,先上代码。

在activity中,实现tts播报早已不是什么难事,但是将其搬到fragment中,却总是有很多坑。之前在百度,Google,Stack Overflow和youtobe上看了很多实现tts播报的demo,但是很多都是在activity上做的。
在Android开发中,虽然使用activity比较简单,但是在实际运用中,fragment虽然复杂但是却更具灵活性,在开发中会被更多地使用。
好了,言归正传。接下来主要讲一下这段代码并说明tts实现播报在fragment和activity中的区别。
要实现tts播报主要通过如下几个部分:

  1. 定义一个TextToSpeech对象

    TextToSpeech ttsObject;

  2. 在TextToSpeech的OnInitListener中设置语言

    ttsObject=new TextToSpeech(MainActivity.this,new OnInitListener(){
    public void onInit(int status){
    //set language
    }
    });

  3. 在OnclickListener中处理error,如果配置正确则speak

    if(there is missing data or missing language){
    //handle the error
    }else{
    ttsObject.speak(text,TextToSpeech.QUEUE_FLUSH,null);
    }

  4. 读完之后释放TextToSpeech engine使用的资源,并停止读

    接下来说明tts播报实现在activity和fragment的区别,主要在第二部份的ttsObject = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {...});在activity中,第一个参数可以写为所在activity.this,也可以写为getApplicationContext();在fragment中,只能写为getActivity()。

希望以上内容能在大家的开发中有所帮助。

转载地址:http://qomaa.baihongyu.com/

你可能感兴趣的文章
iOS程序框架设计之皮肤切换功能 (白天与夜间效果)
查看>>
iptables
查看>>
Project facet Java 6.0 is not supported by target runtime Apache Tomcat v5.5.
查看>>
一个全新的拖拽分页—艺术啊
查看>>
Linux学习之CentOS(三十)--SELinux安全系统基础
查看>>
LVS+keepalived高可用群集
查看>>
jQuery库简介
查看>>
win7系统设置电脑不待机状态的操作方法
查看>>
nginx+php安装配置
查看>>
LAMP+Centos6.5上安装zabbix
查看>>
android判断网络连接状态的三种方法
查看>>
ZOJ Monthly, March 2013 解题报告
查看>>
LaTex表格 Itemize&&enumerate
查看>>
Spring Boot中@OneToMany与@ManyToOne几个需要注意的问题
查看>>
文件传输协议之FTP
查看>>
Openstack 安装部署指南翻译系列 之 Glance服务安装(Image)
查看>>
Java 使用POI实现execl的导入导出数据实践
查看>>
Unity3D游戏开发之伤害数值显示
查看>>
如何在Linux上搭建一个基于Web的轻型监控系统
查看>>
linux基础命令使用
查看>>