与BroadcastReceiver混淆

时间:2010-06-23 05:22:03

标签: android

我有以下pgm响应带有传入消息的Toast并且还说出收到的消息,但是在后台似乎没有语音合成但是我仍然可以看到Toast,所以我应该开始服务从onReceive方法(不知道是否可能)这里然后在startService方法中,编写speak方法??

这是我的一个pgms:

接收机

package com.example.TextSpeaker;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class Receiver extends BroadcastReceiver{


public static String str;
@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    Log.d("Receiver","Message received successfully");

    SmsMessage[] msgs = null;

    if(bundle!=null)
    {
        // retrive the sms received

        Object[] pdus = (Object[])bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];
        for(int i=0;i<msgs.length;i++)
        {
            str="";
            msgs[i]=SmsMessage.createFromPdu((byte[]) pdus[i]);
            str+="Message From "+msgs[i].getOriginatingAddress()+".   ";
            str+="The message is "+msgs[i].getMessageBody().toString();
            //TextSpeaker.mtts.speak(Receiver.str, TextToSpeech.QUEUE_FLUSH,null);
            //str="";

        }
        Toast.makeText(context,str,Toast.LENGTH_LONG).show();
        TextSpeaker.mtts.speak(Receiver.str, TextToSpeech.QUEUE_FLUSH,null);

    }
}

}

3 个答案:

答案 0 :(得分:1)

在尝试使用TTS服务之前,您需要有足够的时间来启动它。

答案 1 :(得分:0)

您在onReceive()中启动服务以及处理服务中的语音输出的想法应该有效。我也会这样做。但我对Android编程很新。

答案 2 :(得分:0)

Intent serviceintent = new Intent();
serviceintent.setAction(".SpeakerService");

我想在您的意图中使用以下更改可能有所帮助:

Intent serviceintent = new Intent(context, SpeakerService.class)
相关问题