перепутан с BroadcastReceiver

#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.