【问题标题】:Listening for SMS and automatically replying to it in Android在 Android 中收听短信并自动回复
【发布时间】:2014-02-25 02:20:58
【问题描述】:

如何在android中自动回复收到的消息?

这是我的 IncomingSMS 类中的 onReceive() 方法,它扩展了 BroadcastRecevier,问题是它发送了很多消息,我希望它只发送一个 SMS 回复。

public class IncomingSMS extends BroadcastReceiver{
private String senderNumber;

@Override
public void onReceive(Context context, Intent intent) {
    Bundle bundle = intent.getExtras();
    SmsMessage[] msgs = null;

    String message = "";            

    if(bundle != null){
        Object[] pdus = (Object[]) bundle.get("pdus");
        msgs = new SmsMessage[pdus.length];



        for(int i = 0; i < msgs.length; i++){
            msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
            message = msgs[i].getMessageBody();
            senderNumber = msgs[i].getOriginatingAddress();
        }
        senderNumber = msgs[0].getOriginatingAddress();

        Toast.makeText(context, message, Toast.LENGTH_LONG).show();
        sendMessage(senderNumber, "Thank you for sending me a message");
    }
}

private void sendMessage(String number, String message) {
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(number, null, message, null, null);
}

【问题讨论】:

  • 你是发送到另一个号码来测试它吗?
  • 是的,我希望它只向那个号码(最初发送消息的人)发送一条短信,(它是应用程序的一部分,将安装在发送方和接收方的设备上)

标签: android sms broadcastreceiver


【解决方案1】:

你所面对的是正常的行为。由于您正在侦听所有传入的短信,因此当它收到感谢信息时,它必然会再次发送短信。您可以做的是,发送一个在 SMS 中唯一的值或布尔值并对其进行检查。如果该值存在,您就不再发送消息。

【讨论】:

  • 是的,你是对的。我的问题是如何实现这样一个功能,即两个设备上的 BroadcastReceiver 不会继续相互回复。 SmsManager 类似乎没有任何帮助,我们如何发送一个布尔值或整数计数器来检查重复短信?
【解决方案2】:

Onrecieve 在收到任何部分短信后运行,并在收到任何部分后发送短信。我认为你应该设置一个接收部分短信的时间,过了那个时间后你发送短信回复

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 2016-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多