#android
#Android
Вопрос:
у меня есть следующий pgm, который отвечает тостом с входящим сообщением, а также выдает полученное сообщение, однако, похоже, в фоновом режиме синтез речи отсутствует, но я все еще вижу тосты, поэтому должен ли я запустить службу из метода onReceive (не знаю, возможно ли это) здесь, а затем в методе startService написать метод speak??
вот один из моих pgm:
Приемник
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);
}
}
}
Ответ №1:
Вам нужно дать достаточно времени для запуска службы TTS, прежде чем пытаться ее использовать.
Ответ №2:
Intent serviceintent = new Intent();
serviceintent.setAction(".SpeakerService");
Я предполагаю, что использование следующего изменения в вашем намерении может помочь:
Intent serviceintent = new Intent(context, SpeakerService.class)
Комментарии:
1. спасибо, это сработало! но опять же, хотя я вижу в журнале, что служба запущена, но я не слышу никакого звука, работает ли движок tts вообще в фоновом режиме?
2. AKAIK да, движок tts продолжает работать в фоновом режиме … и если в вашем журнале не отображается никаких ошибок, я думаю, это означает, что он работает нормально… Кстати, вы пытаетесь использовать его на эмуляторе или устройстве??
Ответ №3:
Ваша идея о запуске службы в onReceive() и обработке речевого вывода в службе должна сработать. Я бы сделал то же самое. Но я довольно новичок в программировании на Android.