仅从特定指定号码接收应用程序SMS消息

时间:2013-08-07 10:11:26

标签: android sms broadcastreceiver

我最近设置了一个应用程序,它将接收短信,然后在主要活动中将它们显示为吐司。一旦应用程序收到短信,它将中止广播并阻止该消息进入收件箱。

目前它会对手机收到的所有消息执行此操作,但我希望它只执行其工作并在特定号码收到SMS时显示吐司。我知道这是一个将if语句放入我的接收器代码的情况,但我不太确定它应放在哪里。

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
    Bundle extras = intent.getExtras();


    if (extras ==null)
        return;
    //toast
    Toast.makeText(context, "Received", Toast.LENGTH_LONG).show();

    Object[] pdus = (Object[]) extras.get("pdus");

    for (int i = 0; i < pdus.length; i++) {
        SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]);
        String sender = SMessage.getOriginatingAddress();
        String body = SMessage.getMessageBody().toString();

        Intent in = new Intent("SmsMessage.intent.MAIN").putExtra("get_msg", sender+":"+body);

        context.sendBroadcast(in);
        this.abortBroadcast();

    }
}
}

3 个答案:

答案 0 :(得分:3)

请放下风暴

    String body=....
    if(sender.equals(phoneNumber)) {

                abortBroadcast() then do something...
    }

请务必尽快进行abortBroadcast,因为如果您在此之前进行了多次操作,原始收件箱将会收到该消息。

答案 1 :(得分:1)

if("123456789".equals(sender))
{
 //do something
}

答案 2 :(得分:1)

你应该这样做:

String body=....
if(PhoneNumberUtils.compare(sender, phoneNumber)) {

            abortBroadcast() then do something...
}