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的回答如何被否决。对我来说,这是正确的