gpt4 book ai didi

android - 如何从广播接收器调用 TextToSpeech

转载 作者:行者123 更新时间:2023-11-29 18:01:56 26 4
gpt4 key购买 nike

我的应用程序正在调用广播接收器来读取传入的文本消息并大声说出来。我的 Broadcast Receiver 被正确调用,它正确读取文本消息,但是当涉及到 speak() 方法时,它就崩溃了。这是我的代码:

这是广播接收器:

public class DrivingModeSpeaker extends BroadcastReceiver  {

@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
int n;
Bundle bundle=intent.getExtras();
Object messages[]=(Object[])bundle.get("pdus");
SmsMessage smsMessage[]=new SmsMessage[messages.length];
for(n=0;n<messages.length;n++)
{
smsMessage[n]=SmsMessage.createFromPdu((byte[])messages[n]);

}
//show first message
String sms1=smsMessage[0].getMessageBody();
String from=smsMessage[0].getOriginatingAddress();
Toast toast=Toast.makeText(context,"In DrivingModeSpeaker BR",1);
toast.show();
DrivingMode.speakSMS(sms1);

}


}

这是包含 speak() 方法的 DrivingMode.java:

public class DrivingMode extends Activity {
private static TextToSpeech myTts;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.message_m);
myTts = new TextToSpeech(this,ttsInitListener);


}

private TextToSpeech.OnInitListener ttsInitListener=new TextToSpeech.OnInitListener() {

@Override
public void onInit(int version) {
// myTts.speak(""+o, 0 ,null);

}
};
public static void speakSMS(String sms)
{
myTts.speak(sms,0,null);

}


}

我已经在一个单独的项目中试用了这段代码,它有效。但在我的主要项目中,它没有 - 可能是因为两个广播接收器发生冲突或其他原因?我不知道,我是 Android 新手,请帮忙!

最佳答案

当前您正在尝试通过创建一个 Activity 实例来调用 Activity 方法,如果 Activity 未运行则该实例会通过 NullPointerException。因此,不是调用 Activity 的方法,而是从 BroadcastReceiver 启动 Activity 并使用 Intent.putExtra 发送短信数据:

例如:

public void onReceive(Context context, Intent intent) 
{
// Your code here....
Toast toast=Toast.makeText(context,"In DrivingModeSpeaker BR",1);
toast.show();
// start Activity here
Intent intent = new Intent(context,
DrivingMode.class);
intent.putExtra("sms", sms); //<<< put sms text
context.startActivity(intent);

}

并在 DrivingMode onCreate 方法中获取短信数据并调用 speakSMS 方法:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView(R.layout.message_m);
Bundle extras = getIntent().getExtras();
myTts = new TextToSpeech(this,ttsInitListener);
DrivingMode.speakSMS(extras.getString("sms"));

}

也可以使用 TextToSpeech.setOnUtteranceCompletedListener用于在 Speak 结束时完成 Activity

关于android - 如何从广播接收器调用 TextToSpeech,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15497474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com