Android-接收器未注册

时间:2014-12-11 22:00:47

标签: java android broadcastreceiver text-to-speech

我正在尝试使用broadcastReceiver编写一个使用textToSpeech来阅读收入短信的简单应用。

这是活动:

public class MainActivitySmsToVoice extends Activity {

private TextToSpeech engine;
private static final int STATUS_CHECK = 0;
Button btnStart;
Button btnStop;
MySmsToVoiceReceiver br;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main_activity_sms_to_voice);

    btnStart = (Button) findViewById(R.id.button1);
    btnStop = (Button) findViewById(R.id.button2);

    btnStart.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            btnStart.setVisibility(View.VISIBLE);
            btnStop.setVisibility(View.VISIBLE);

            br = new MySmsToVoiceReceiver();
            //register SMS receiver
            registerReceiver(br, new IntentFilter("android.provider.Telephony.SMS_RECEIVED"));
        }
    });
    Intent checkIntent = new Intent();
    checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
    startActivityForResult(checkIntent, STATUS_CHECK);
}

//This method will be called after startActivityForResult() finishes, 
//and check weather the text to speech installed on device
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    switch (resultCode) {
    case TextToSpeech.Engine.CHECK_VOICE_DATA_PASS:
        engine = new TextToSpeech(this, (OnInitListener) this);
        break;
    case TextToSpeech.Engine.CHECK_VOICE_DATA_FAIL:
        Intent installIntent = new Intent();
        installIntent
                .setAction(TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
        startActivity(installIntent);
        break;
    default:
        Log.e("textToSpeach", "Unable to intall TextToSpeach module");
    }
}

@Override
protected void onPause() {
    super.onPause();
    unregisterReceiver(br);
    btnStop.setVisibility(View.INVISIBLE);
}

}

这是BroadcastReceiver:

public class MySmsToVoiceReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVE_ACTION = "android.provider.Telephony.SMS_RECEIVED";
private TextToSpeech engine;

@Override
public void onReceive(Context context, Intent intent)
{
    Log.i("sms_receiver","within the onReceive method");
    if (intent != null
            && intent.getAction() != null
            && intent.getAction().compareToIgnoreCase(SMS_RECEIVE_ACTION) == 0)
    {
        Object[] vec = (Object[]) intent.getExtras().get("pdus");
        SmsMessage[] messages = new SmsMessage[vec.length];
        for (int i = 0; i < vec.length; i++)
        {
            messages[i] = SmsMessage.createFromPdu((byte[]) vec[i]);
            Log.i("sms_receiver", messages[i].getMessageBody());
            //speak the message
            engine.speak( messages[i].getMessageBody().toString(), 
                    TextToSpeech.QUEUE_ADD, null);
        }
    }
}

}

跑步时我得到错误:

  

java.lang.RuntimeException:无法暂停活动   java.lang.IllegalArgumentException:Receiver未注册:null

我做错了什么?

0 个答案:

没有答案