Android 11使用TextToSpeech实现文字转换语音&&相关bug:speak failed: not bound to TTS engine

代码

MainActivity.java

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.util.Locale;

public class MainActivity extends AppCompatActivity {

    private EditText main_edit_text;
    private TextToSpeech mTextToSpeech;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        main_edit_text = (EditText)findViewById(R.id.message);
        mTextToSpeech = new TextToSpeech(this,new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) { //初始化tts
                if(status==TextToSpeech.SUCCESS) {
                    //初始化成功
                    Log.e("error","haha");
                }
                else {
                    Log.e("error","呕");
                    Toast.makeText(MainActivity.this,"初始化失败",Toast.LENGTH_SHORT);
                }
            }
        });
        Log.e("activityState", "Activity_onCreate");
    }
    public void speak(View view) {
        String content = main_edit_text.getText().toString();
        Log.e("error",content);
        if (content.isEmpty()) {
            mTextToSpeech.speak("空空", TextToSpeech.QUEUE_ADD, null);
        } else {
            mTextToSpeech.speak(content, TextToSpeech.QUEUE_ADD, null);
        }
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.e("activityState", "Activity_onStart");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("activityState", "Activity_onRestart");
    }
    @Override
    protected void onPause() {
        super.onPause();
        Log.e("activityState", "Activity_onPause");
    }
    @Override
    protected void onResume() {
        super.onResume();
        Log.e("activityState", "Activity_onResume");
    }
    @Override
    protected void onStop() {
        super.onStop();
        // 不管是否正在朗读TTS都被打断
        mTextToSpeech.stop();
        // 关闭,释放资源
        mTextToSpeech.shutdown();
    }
    @Override
    protected void onDestroy() {
        if (mTextToSpeech != null) {
            mTextToSpeech.stop();
            mTextToSpeech.shutdown();
            mTextToSpeech = null;
        }
        super.onDestroy();
    }
}

activity_main.xml

注意设置button点击动作为speak

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    >
    <EditText
        android:id="@+id/message"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:hint="Enter a message"></EditText>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="speak"
        android:text="Read"></Button>
</LinearLayout>
BUG记录

如果出现speak failed: not bound to TTS engine并且是Android 11

注意:模拟器是Android11版本要在AndroidManifest.xml中加入

<queries>
    <intent>
       <action android:name="android.intent.action.TTS_SERVICE" />
    </intent>
</queries>

点击查看[官方文档](TextToSpeech | Android 开发者 | Android Developers (google.cn))

相关链接

Android-TextToSpeech-Example/TTSManager.java at master · stacktipslab/Android-TextToSpeech-Example (github.com)

Android-TextToSpeech/MainActivity.java at master · tutsplus/Android-TextToSpeech (github.com)

Android-TextToSpeech/Speaker.java at master · tutsplus/Android-TextToSpeech (github.com)

stacktipslab/Android-TextToSpeech-Example: Android TextToSpeech Example (github.com)

JocysCom/TextToSpeech: Jocys.com Text To Speech Monitor and WoW Addon - Reads quests and chat messages with text-to-speech voices. (github.com)

***YunyangBlogDemo/texttospeechdemo at master · WarmYunyang/YunyangBlogDemo (github.com)

sunfusong/NativeTTS: Android原生TTS+讯飞语音引擎实现免费纯离线的中英TTS (github.com)

文字转化为语音Android中TextToSpeech类的简单使用 - 简书 (jianshu.com)

TextToSpeech的使用_Brioal Is Hardworking-CSDN博客

android TTS TextToSpeech - 简书 (jianshu.com)

(2条消息) 安卓文字转语音——其实可以很简单——TextToSpeech用法解析_feisher-CSDN博客_安卓文字转语音

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
这个问题可能是由于没有正确设置TTS引擎导致的。您可以尝试以下步骤来解决此问题: 1. 确认您的设备上已经安装了TTS引擎。您可以在“设置”中找到“语音输入和输出”选项,检查您的TTS引擎是否已启用。 2. 如果您的设备上没有TTS引擎,您可以在Google Play商店中搜索并下载TTS引擎。 3. 如果您的设备上已安装TTS引擎,请确保它已启用。您可以在“设置”中找到“语音输入和输出”选项,检查您的TTS引擎是否已启用。 4. 如果您已经安装和启用了TTS引擎,但仍然遇到问题,请尝试清除TTS引擎的缓存和数据。您可以在“设置”中找到“应用程序”选项,找到您的TTS引擎并清除其缓存和数据。 5. 最后,请确保您的应用程序有权限使用TTS引擎。您可以在您的应用程序清单文件中添加以下权限: ``` <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/> <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <uses-permission android:name="android.permission.READ_CONTACTS"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.BLUETOOTH"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/> <uses-permission android:name="android.permission.READ_LOGS"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.CAMERA"/> <uses-permission android:name="com.android.vending.BILLING"/> <uses-permission android:name="android.permission.GET_TASKS"/> <uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"/> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> <uses-permission android:name="android.permission.WRITE_SETTINGS"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.SYSTEM_OVERLAY_WINDOW"/> <uses-permission android:name="android.permission.MANAGE_DOCUMENTS"/> <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/> <uses-permission android:name="android.permission.RECORD_VIDEO"/> <uses-permission android:name="android.permission.RECORD_AUDIO"/> <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/> <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/> <uses-permission android:name="android.permission.FLASHLIGHT"/> <uses-permission android:name="android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND"/> <uses-permission android:name="android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND"/> ``` 希望这些步骤可以帮助您解决问题。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值