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

开发环境

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

先贴代码

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

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需要额外的权限,然后他贴了一个代码,需要增加一个权限,之后在申请。但是试了没用…代码我贴在下面了,你们可以也试试。

<!-- 亲测权限报警告,提示没有这个权限,改成BIND_ACCESSIBILITY_SERVICE也不行 -->
<uses-permission android:name="android.permission.ACCESSIBILITY_SERVICE" />
// 检查是否有这个权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    if (!isAccessibilityServiceEnabled(context)) {
        Intent intent = new Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS);
        startActivity(intent);
    }
}
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();
            }
        }
    });
}

解决方案

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

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

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

<think>嗯,用户遇到了Windows MicroStore初始化失败的问题,需要找出解决方案和错误原因。首先,我要理解什么是MicroStore。可能是指Windows中的某个组件或服务,但这个名字不太常见,可能需要进一步确认。考虑到用户提供的引用中有关于Android TTS初始化失败、MySQL初始化失败Tomcat协议处理问题,这些都与系统或服务初始化有关,所以可能MicroStore初始化失败也是类似的权限或配置问题。 首先,我应该检查用户提到的错误是否与权限有关,比如在Android的例子中,需要添加特定的查询权限。在Windows环境下,可能需要检查用户权限或服务账户是否有足够的权限运行MicroStore。另外,MySQL的例子显示通过命令行重新初始化和配置可以解决问题,可能MicroStore也需要类似的重新安装或修复步骤。 接下来,考虑可能的错误原因。可能是系统文件损坏,如DLL文件缺失或损坏,或者注册表项错误。此外,依赖的服务没有启动,比如某个Windows服务未运行,导致MicroStore无法初始化。还有可能是安全软件阻止了MicroStore的启动,或者最近的系统更新导致了兼容性问题。 解决方案方面,可能需要运行系统文件检查工具,如sfc /scannow,来修复系统文件。如果MicroStore是某个应用程序的一部分,重新安装该程序可能有效。此外,检查事件查看器中的详细错误日志,可以帮助确定具体的失败原因。调整用户权限或关闭第三方安全软件进行测试也是可行的步骤。如果有最近的系统更新,回滚更新可能解决问题。 需要确保用户按照步骤操作,并建议备份数据以防万一。如果这些通用方法无效,可能需要更具体的错误信息来进一步诊断,比如错误代码或事件日志中的条目。最后,提醒用户如果问题持续,可能需要联系技术支持以获得更专业的帮助。</think>### Windows MicroStore初始化失败解决方案及错误原因分析 #### 一、错误原因推测 1. **权限问题** - 类似Android TTS初始化失败案例[^1],MicroStore可能需要特定系统权限(如注册表访问、文件读写权限)才能完成初始化。若用户账户权限不足或安全策略限制,可能导致初始化失败。 - 安全软件(如防火墙、杀毒工具)可能拦截了MicroStore的初始化进程[^4]。 2. **依赖项缺失或损坏** - MicroStore依赖的Windows系统组件(如.NET Framework、C++运行库)未安装或版本不兼容。 - 系统文件损坏(如通过`sfc /scannow`可检测的DLL文件问题)。 3. **服务配置异常** - 关联的Windows服务未启动(如Windows Update服务、Cryptographic Services)。 - 注册表项错误或配置参数异常(参考MySQL初始化失败案例中的配置调整[^2])。 4. **系统更新冲突** - 近期Windows更新可能与MicroStore组件存在兼容性问题(类似Tomcat协议处理中的依赖冲突)。 --- #### 二、解决方案步骤 1. **基础排查** - 以管理员身份运行命令提示符,执行以下命令修复系统文件: ```bash sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth ``` - 重启系统后检查问题是否解决。 2. **权限与安全软件调整** - 暂时关闭第三方安全软件。 - 右键点击MicroStore相关程序,选择“以管理员身份运行”。 - 检查用户账户控制(UAC)设置是否限制权限。 3. **依赖项修复** - 通过**控制面板 > 程序 > 启用或关闭Windows功能**,确认以下组件已启用: - .NET Framework 3.5/4.8 - Windows PowerShell 2.0/5.1 - 从微软官网下载并安装最新版[Visual C++ Redistributable](https://aka.ms/vs/16/release/vc_redist.x64.exe)。 4. **服务与注册表修复** - 按`Win+R`输入`services.msc`,检查以下服务状态并重启: - Windows Update - Cryptographic Services - Background Intelligent Transfer Service ``` net start cryptSvc net start bits net start wuauserv ``` - 使用注册表编辑器(谨慎操作,建议备份)定位到`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\`,检查MicroStore相关路径是否存在异常。 5. **系统还原或重置** - 若问题由近期更新引起,可通过**设置 > 更新与安全 > 恢复 > 返回到以前的版本**回退更新。 - 使用系统还原点恢复至正常状态。 --- #### 三、扩展建议 - **日志分析** 通过**事件查看器 > Windows日志 > 应用程序**,筛选MicroStore初始化失败时的错误代码(如`0x80070005`),结合具体代码进一步排查[^3]。 - **兼容性模式运行** 右键点击MicroStore程序,选择**属性 > 兼容性**,尝试以Windows 8兼容模式运行。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

用砖头敲代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值