java – 不允许IntentReceiver组件绑定到服务

这是我的代码

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中无法绑定到服务.这有什么解决方法吗?

解决方法

Is there any workaround for this?

你有比这更大的问题.

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

其次,当SMS消息进入时,您不知道用户正在做什么.他们可能正在玩游戏.他们可能正在拨打电话的电话中间.您不能,也不能,不能单方面决定您将通过文本转语音播放一个人的短信.你很容易被起诉,也许更糟.

我敦促你现在停止编码,并坐下来思考 – 真的想 – 你正在尝试做什么,以及你的方法的后果.

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...