Java 不允许IntentReceiver组件绑定到服务

Java 不允许IntentReceiver组件绑定到服务,java,android,broadcastreceiver,text-to-speech,Java,Android,Broadcastreceiver,Text To Speech,这是我的密码: import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.speech.tts.TextToSpeech; import android.telephony.SmsMessage; import android.util.Log; public class SmsBroadcastReceiver

这是我的密码:

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.speech.tts.TextToSpeech;
import android.telephony.SmsMessage;
import android.util.Log;

public class SmsBroadcastReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        Object[] rawMsgs = (Object[])intent.getExtras().get("pdus");

        for (Object raw : rawMsgs) {
            SmsMessage message  = SmsMessage.createFromPdu((byte[])raw);

            Log.v("[SMS]:", message.getMessageBody());

            TextToSpeech tts = new TextToSpeech(context, null);

        }
    }
}
我尝试初始化
TextToSpeech
时出错。显然,在
BroadcastReceiver
中,我无法绑定到服务。有什么解决办法吗

有什么解决办法吗

你有很多更大的问题

首先,在主应用程序线程上以前台优先级调用onReceive()。在那里花费的时间不能超过几毫秒,否则会导致前台应用程序出现问题,例如在游戏中出现口吃

第二,当收到短信时,你不知道用户在做什么。他们可能在玩游戏。他们可能是在他们的扬声器电话的中间。你不能,不能,不能单方面决定你将通过文本到语音播放某人的短信。你很容易被起诉,甚至更糟


我敦促你现在停止编码,坐下来好好想想——真的想想——你要做的是什么,以及你的方法的后果。

除非用户愿意,否则我实际上不会说这个消息。我只是把它放在那里作为概念的证明。实际上,我只是想把这个应用到驾驶上。如果这个人以一定的速度前进,广播意图就会被记录下来。@Mohit Deshpande:好吧,这不是一个完全疯狂的动机。您需要一个
服务来为您执行此操作,因为
onReceive()
花费的时间太长,API建议您需要
shutdown()
使用
TextToSpeech
对象。通过
startService()
将SMS文本传递给服务。我应该在服务的onBind方法中做什么?没有什么?因为我只需要onCreate和onStart/onStartCommand方法?@Mohit Deshpande:如果您没有调用
bindService()
,您的
onBind()
不需要做任何特别的事情。但是,如果要扩展
服务
,则需要有一个
onBind()
实现(通常返回
null
),因为
Service
是一个抽象类,需要
onBind()
。如果您正在扩展
IntentService
,它有一个
onBind()
实现,因此您无需做任何事情。我无法理解Mark的回答如何被否决。对我来说,这是正确的