首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android TTS - ACTION_CHECK_TTS_DATA默认引擎

Android TTS - ACTION_CHECK_TTS_DATA默认引擎
EN

Stack Overflow用户
提问于 2013-07-28 17:43:35
回答 1查看 1.6K关注 0票数 2

在我的应用程序(Android API 10)中,我使用标准方法检查TTS引擎和语音是否可用:

代码语言:javascript
复制
Intent checkIntent = new Intent();
checkIntent.setAction( TextToSpeech.Engine.ACTION_CHECK_TTS_DATA );
startActivityForResult( checkIntent, CHECK_TTS_DATA );

在具有多个TTS引擎的设备中,Android要求选择一个("complete action using...")

有没有办法使用默认的TTS引擎来检查ACTION_CHECK_TTS_DATA (避免出现引擎选择对话框)?或者..。如何让用户选择TTS引擎(与setEngineByPackageName() (API10)一起使用)?

EN

回答 1

Stack Overflow用户

发布于 2013-10-16 21:01:29

有几种方法可以做到这一点。要获取默认的TTS引擎,请签入onInit侦听器:

代码语言:javascript
复制
TextToSpeech tts = new TextToSpeech(context, onInitListener);


    @Override
        public void onInit(final int status) {

            switch (status) {

            case TextToSpeech.SUCCESS:

                try {

                    final String initEngine = tts.getDefaultEngine();

    // Check it's != null before doing anything with it.

                } catch (final Exception e) {

                }

        break;
    }
}

try/catch块在那里,因为我在一些IVONA和SVOX TTS引擎上遇到过崩溃。

一旦您有了包名,您就可以查询意图活动,如果需要,可以使用自定义选择器或将意图限制为您从上面获得的包名。

代码语言:javascript
复制
    private void getEngines(String initEngine) {

        Intent ttsIntent = new Intent();
        ttsIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);

        PackageManager pm = getPackageManager();

        List<ResolveInfo> list = pm.queryIntentActivities(ttsIntent,
                PackageManager.GET_META_DATA);

        for (ResolveInfo appInfo : list) {

// Might want a null check in here

            if(appInfo.activityInfo.applicationInfo.packageName.matches(initEngine) {

            ttsIntent
                    .setPackage(appInfo.activityInfo.applicationInfo.packageName);
        }


            startActivityForResult(ttsIntent, 33);

        }
    }

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 33 && data != null) {

       // do something
    }
}

我还没有测试过上面的东西,但我相信你可以在它的基础上进行构建,让它做你想做的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17906930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档