【问题标题】:Receiving in app SMS messages only from certain specified numbers仅从某些指定号码接收应用内 SMS 消息
【发布时间】:2013-08-07 10:11:26
【问题描述】:

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

目前它对手机收到的所有消息都执行此操作,但我希望它仅在特定号码收到短信时执行其工作并显示敬酒。我知道这是将 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();

    }
}
}

【问题讨论】:

    标签: android sms broadcastreceiver


    【解决方案1】:

    放下面

        String body=....
        if(sender.equals(phoneNumber)) {
    
                    abortBroadcast() then do something...
        }
    

    一定要尽快做abortBroadcast,因为如果你在它之前做了很多操作,原来的收件箱会收到消息。

    【讨论】:

    • 啊,是的,这些似乎很完美,谢谢。假设我希望数字来自变量,例如,如果我将数字存储为字符串变量,我该怎么做?
    • 我写的变量“phoneNumber”是字符串类型,所以它是一样的;)。 SMessage.getOriginatingAddress() 以字符串格式返回数字。
    • 但请记住电话号码的前缀。如果我没记错的话,电话总是返回带有 +44 的号码......或者区号是什么。所以你必须把电话号码写成相同的格式或者做一些String操作来比较不同的格式。
    • 是的,谢谢你的帮助,我确实发现它是你所说的情况,它总是会读取数字,例如+44.... 我现在所做的是使用PhoneNumberUtils.compare(sender, phoneNumber)这样它允许将数字读取为 07... 数字而不是 +44...
    • 我明白你说的 ;) 。嘿,我实际上忘记了 PhoneNumberUtils 并为区号编写了自己的解析器:D。好东西你提醒了我。
    【解决方案2】:

    你应该这样做:

    String body=....
    if(PhoneNumberUtils.compare(sender, phoneNumber)) {
    
                abortBroadcast() then do something...
    }
    

    【讨论】:

      【解决方案3】:
      if("123456789".equals(sender))
      {
       //do something
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-18
        相关资源
        最近更新 更多