我如何使用广播接收器?

时间:2014-08-15 08:35:06

标签: android

我希望在使用广播接收器收到消息时收到通知。我写了这段代码,但它不起作用;

我在AndroidManifest类中添加了此代码;

<receiver android:name=".receiver.SMSReceiver" >
    <intent-filter>
        <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
</receiver>

我的SMSReceiver类;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

public class SMSReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

    Bundle pudsBundle = intent.getExtras();
    Object[] pdus = (Object[]) pudsBundle.get("pdus");
    SmsMessage messages = SmsMessage.createFromPdu((byte[]) pdus[0]);
    Toast.makeText(context, "New SMS: " + messages.getMessageBody(),
        Toast.LENGTH_LONG).show();
    Log.d(getClass().getName().toString(), "SMS Arrived");
    }

}

当短信到达时,此代码必须向我显示Toast消息。我该如何解决这个问题? 谢谢。

2 个答案:

答案 0 :(得分:0)

您必须拥有权限:

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />

如果您想发送短信,则需要获得许可:

<uses-permission android:name="android.permission.SEND_SMS" />

答案 1 :(得分:0)

我认为你需要注册你的广播接收器。希望得到帮助。

@Override
public void onResume() {
   super.onResume();

   // Register mMessageReceiver to receive messages.
   LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
    new IntentFilter("my-event"));
}
相关问题