2 hcg 21 hcg_21 于 2013.07.11 17:19 提问

BroadcastReceiver 呼叫服务只循环一次

下面是我的 tts 服务代码:

public class SMSTTSService extends Service implements TextToSpeech.OnInitListener, OnUtteranceCompletedListener {
private TextToSpeech tts;
private String spokenText;
@Override
public void onCreate() {
    tts = new TextToSpeech(this, this);     
}
@Override
public void onInit(int status) {        
    if (status == TextToSpeech.SUCCESS) {
        int result = tts.setLanguage(Locale.ENGLISH);
        // tts.setPitch(5); // set pitch level
        // tts.setSpeechRate(2); // set speech speed rate
        if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
            Log.e("TTS", "Language is not supported");
        } else {                
            speakOut(spokenText);
        }

        /*if (result != TextToSpeech.LANG_MISSING_DATA && result != TextToSpeech.LANG_NOT_SUPPORTED) {
            tts.speak(c, TextToSpeech.QUEUE_FLUSH, null);
        }*/
    } else {
        Log.e("TTS", "Initilization Failed");
    }
}
private void speakOut(String text) {
    tts.speak(text, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
public void onUtteranceCompleted(String uttId) {
    stopSelf();
}
@Override
public void onDestroy() {
    if (tts != null) {
        tts.stop();
        tts.shutdown();
    }
    super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
    return null;
}       
@Override
public void onStart(Intent intent, int startId) {
    super.onStart(intent, startId);     
    spokenText = intent.getStringExtra("spoken_txt");
}
}

从接收器中调用服务器:

public class Receiver extends BroadcastReceiver {
    private static final String TAG = "SMSReceiver";
    @Override
    public void onReceive(Context context, Intent intent) {
for(int i=0; i<msgs.length; i++) {
....
 Intent intentTTS = new Intent(context, SMSTTSService.class);
                        intentTTS.putExtra("spoken_txt", msgBody);
                        context.startService(intentTTS);
}

但是在循环语句中服务器只执行一次。这是哪的问题?如何避免?

1个回答

cj6585256
cj6585256   2013.07.11 17:41

先检查下msgs.length长度
长度没问题,改成这样行不行
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);

spokenText = intent.getStringExtra("spoken_txt");

//do your method
speakOut(spokenText);
}

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Windows服务定点一天只运行一次
如Windows自开发的服务 设置的时间范围为10点,意思为在10-11点之间会运行 再设置循环5分钟运行一次   比如说同步某些数据,或者生成某中间xml文件, 如果如上设置,就会在10-11点之间循环运行很多次,导致生成很多重复文件. 其实一般该类服务只需要一天运行一次即可.那怎么控制呢,既能在10-11之间触发一次,但不会重复执行   有一种方法是,设置参数,如果当天执行一次
循环体只执行了一次
<br /><%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" conte
PHP CURL 在WHILE FOR 循环体中只执行一次
被这问题坑的不行。最后通过在使用变量前unset解决。使用curl multi似乎也能解决该问题,未测试。unset($url); unset($todata); $url = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$access_token"; $todata = '{ "touser": "'.$ord
setTimeout只运行一次 setinterval是循环运行的
setTimeout只运行一次,也就是说设定的时间到后就触发运行指定代码,运行完后即结束。如果运行的代码中再次运行同样的setTimeout命令,则可循环运行。 setinterval是循环运行的,即每到设定时间间隔就触发指定代码。这是真正的定时器。 setinterval使用简单,而setTimeout则比较灵活,可以随时退出循环,而且可以设置为按不固定的时间间隔来运行,比如第一次1秒,第二次2
一次完整呼叫的流程 by Nokia
GSM可以说的秘密(3) 最基本的NSS与BSS的架构与一次完整呼叫的流程 http://blog.csdn.net/yui
java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql
java for循环里面执行sql语句操作,有效结果只有一次,只执行了一次sql mybatis 循环执行update生效一次 实际只执行一次 java后台controller中,for循环执行数据库操作,但是发现实际仅仅执行了一次,或者说提交成功了一次,并没有实际的个数循环 有可能是同一个对象导致的   可以仔细看一下下面两段代码有什么区别 ps:代
C# button_click 里的for循环点击一次只能执行一遍
想点击一次就能走完整个循环不知道怎么是实现,求大神帮忙解答 private void button2_Click(object sender, EventArgs e)         {             timer1.Start();             for (int i = 0; i             {                 int j = i;
android BroadcastReceiver 广播 onReceive()执行多次
功能:下载listView中点击的item数据, ListView的activity中代码: @Override protected void onListItemClick(ListView l, View v, int position, long id) { Mp3Info mp3Info = this.mp3Infos.get(position); Intent intent =
jmeter仅一次控制器和交替控制器
仅一次控制器、交替控制器对多线程不生效,它只是针对单线程的,可以设置为单线程循环多次线程组设置运行结果如图所示
一条广播onReceive方法多次执行
在最近的项目中用到了极光推送,集成进去后,发送自定义消息,接收到自定义消息后,通过广播的形式将消息发送出去,自定义消息自然需要用到自定义的receiver,自定义完成receiver后,运行项目发现一条广播发送后,onReceive()方法竟然执行了多次,尤其是在将消息发送到BaseActivity时,更奇怪的事情发生了,打开了几个activity,onReceive()方法就会执行几次,可是极光