首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android原生开发TTS(Text To Speech)初始化失败的解决办法

Android原生开发TTS(Text To Speech)初始化失败的解决办法

原创
作者头像
用砖头敲代码
发布2025-04-25 09:57:23
发布2025-04-25 09:57:23
1.1K0
举报
文章被收录于专栏:用砖头敲代码用砖头敲代码

开发环境

经过我摸索,下载sherpa-onnx-{version}-{arch}-zh-tts-engine开头的就是中文的tts引擎,后面的就是模型,大家按需下载就好了。

先贴代码

这个代码网上一大堆,我就直接贴过来了,主要就是MainActivity引入TTS监听,然后在OnCreate中初始化就好了。

代码语言:java
复制
public class MainActivity extends AppCompatActivity implements TextToSpeech.OnInitListener {
    private TextToSpeech mTextToSpeech;
    private static final String LOG_TAG = MainActivity.class.getSimpleName();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 初始化TextToSpeech引擎
        mTextToSpeech = new TextToSpeech(this, this);
    }

    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            // 设置语言为中文
            int result = mTextToSpeech.setLanguage(Locale.CHINA);
            if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                Toast.makeText(this, "不支持中文", Toast.LENGTH_SHORT).show();
            } else {
                // 引擎初始化成功
                Toast.makeText(this, "TTS引擎初始化成功", Toast.LENGTH_SHORT).show();
            }
        } else {
            Toast.makeText(this, "TTS引擎初始化失败", Toast.LENGTH_SHORT).show();
        }
    }
}

问题出现

但是呢,运行的时候,直接就提示“TTS引擎初始化失败”,我首先考虑的是不是没有tts引擎的问题,于是便找了一个开源免费的TTS引擎,地址我贴在上面了,下载安装好,在设置里面设置一下默认引擎就行了,但是还是初始化失败。

但是TextToSpeech类只有SUCCESSERROR的属性,也不会报错看到具体的原因,这就很难受了。只能上网上去找解决方案了,看到一个方案是因为Android 11需要额外的权限,然后他贴了一个代码,需要增加一个权限,之后在申请。但是试了没用...代码我贴在下面了,你们可以也试试。

代码语言:xml
复制
<!-- 亲测权限报警告,提示没有这个权限,改成BIND_ACCESSIBILITY_SERVICE也不行 -->
<uses-permission android:name="android.permission.ACCESSIBILITY_SERVICE" />
代码语言:java
复制
// 检查是否有这个权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (!isAccessibilityServiceEnabled(context)) {
        Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
        startActivity(intent);
    }
}
代码语言:java
复制
private TextToSpeech tts;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // 初始化TTS
    tts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                tts.setLanguage(Locale.US);
            } else {
                Toast.makeText(MainActivity.this, "TTS初始化失败", Toast.LENGTH_SHORT).show();
            }
        }
    });
}

解决方案

上文提到已经确定是缺少权限的原因,只要顺着这个思路,肯定就是没问题的,于是我又找到了一个可以解决这个问题的办法。

代码语言:xml
复制
<queries>
    <intent>
        <action android:name="android.intent.action.TTS_SERVICE" />
    </intent>
</queries>

亲测加上这个就能用了,虽然抽象,但是也没什么大问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开发环境
  • 先贴代码
  • 问题出现
  • 解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档