从广播接收机或服务开始Android的TTS [英] Start Android TTS from Broadcast Receiver or Service

查看:145
本文介绍了从广播接收机或服务开始Android的TTS的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图让TTS在后台运行。但是,我从来没有得到任何声音。我有启动的服务的广播接收机。我把我的TTS code在这两个,但它永远不会说话。我知道这个方法被称为(我把它断点),但它仍然无法正常工作。

下面是我的日志,但它似乎并没有包含关于TTS服务的任何东西。

  10-04 22:45:30.663:WARN / InputManagerService(209):窗口已经集中,忽视聚焦增益:com.android.internal.view.IInputMethodClient $存根$代理@ 4423df40
10-04 22:45:37.363:信息/ PollingManager(449):calculateShortestInterval():最短时间间隔为54万
10-04 22:45:37.413:信息/ TLSStateManager(449):org.apache.harmony.nio.internal.SocketChannelImpl@4400ece0:写了29个字节的数据与剩余0字节。
10-04 22:45:38.043:ERROR / IMAPEmailService(480):无法创建默认的IMAP系统文件夹废纸篓。请重新配置文件夹名称。
10-04 22:45:40.123:ERROR /亿万(303):EF_PNN:没有短名称
10-04 22:45:41.543:ERROR / WMSTS(171):月是无效的:0
10-04 22:45:42.043:WARN / AudioFlinger(172):写阻塞212毫秒,24延迟写入,螺纹0xb998
 

感谢大家提前!

解决方案

这将有助于看到你的TTS code,使人们更容易帮助你。因为我已经有TTS在一个BroadcastReceiver工作,这里是从我的code下调一个例子。

 公共静态类TTS扩展服务实现TextToSpeech.OnInitListener,OnUtteranceCompletedListener {
    私人TextToSpeech MTTS;
    私人字符串spokenText;

    @覆盖
    公共无效的onCreate(){
        MTTS =新TextToSpeech(这一点,这一点);
        //这是一个很好的地方设置spokenText
    }

    @覆盖
    公共无效的OnInit(INT状态){
        如果(状态== TextToSpeech.SUCCESS){
            INT结果= mTts.setLanguage(Locale.US);
            如果(结果= TextToSpeech.LANG_MISSING_DATA和放大器;!&安培;!结果= TextToSpeech.LANG_NOT_SUPPORTED){
                mTts.speak(spokenText,TextToSpeech.QUEUE_FLUSH,NULL);
            }
        }
    }

    @覆盖
    公共无效onUtteranceCompleted(字符串uttId){
        stopSelf();
    }

    @覆盖
    公共无效的onDestroy(){
        如果(MTTS!= NULL){
            mTts.stop();
            mTts.shutdown();
        }
        super.onDestroy();
    }

    @覆盖
    公众的IBinder onBind(意向为arg0){
        返回null;
    }
}
 

在你想让它说你的BroadcastReceiver点开始TTS服务

  context.startService(新意图(背景下,TTS.class));
 

我希望这可以帮助别人,如果不是提问者(我敢肯定,他得到它的工作现在)。

I'm trying to get TTS to run in the background. But, I never get any sound. I have a broadcast receiver which starts a service. I put my TTS code in both of those, but it never speaks. I know the method is being called (I put a breakpoint on it), but it still doesn't work.

Here's my log, but it doesn't seem to contain anything about the TTS service.

10-04 22:45:30.663: WARN/InputManagerService(209): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@4423df40
10-04 22:45:37.363: INFO/PollingManager(449): calculateShortestInterval(): shortest interval is 540000
10-04 22:45:37.413: INFO/TLSStateManager(449): org.apache.harmony.nio.internal.SocketChannelImpl@4400ece0: Wrote out 29 bytes of data with 0 bytes remaining.
10-04 22:45:38.043: ERROR/IMAPEmailService(480): Can't create default IMAP system folder Trash. Please reconfigure the folder names.
10-04 22:45:40.123: ERROR/EONS(303): EF_PNN: No short Name
10-04 22:45:41.543: ERROR/WMSTS(171): Month is invalid: 0
10-04 22:45:42.043: WARN/AudioFlinger(172): write blocked for 212 msecs, 24 delayed writes, thread 0xb998

Thanks everyone in advance!

解决方案

It would help to see your TTS code to make it easier for people to help you. Since I already have TTS working in a BroadcastReceiver, here's an example trimmed down from my code.

public static class TTS extends Service implements TextToSpeech.OnInitListener, OnUtteranceCompletedListener {
    private TextToSpeech mTts;
    private String spokenText;

    @Override
    public void onCreate() {
        mTts = new TextToSpeech(this, this);
        // This is a good place to set spokenText
    }

    @Override
    public void onInit(int status) {
        if (status == TextToSpeech.SUCCESS) {
            int result = mTts.setLanguage(Locale.US);
            if (result != TextToSpeech.LANG_MISSING_DATA && result != TextToSpeech.LANG_NOT_SUPPORTED) {
                mTts.speak(spokenText, TextToSpeech.QUEUE_FLUSH, null);
            }
        }
    }

    @Override
    public void onUtteranceCompleted(String uttId) {
        stopSelf();
    }

    @Override
    public void onDestroy() {
        if (mTts != null) {
            mTts.stop();
            mTts.shutdown();
        }
        super.onDestroy();
    }

    @Override
    public IBinder onBind(Intent arg0) {
        return null;
    }
}

Start the TTS service at the point in your BroadcastReceiver where you want it to speak:

context.startService(new Intent(context, TTS.class));

I hope this helps someone if not the asker (I'm sure he got it working by now).

这篇关于从广播接收机或服务开始Android的TTS的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆