如何停止多次接收相同的短信?
Posted
技术标签:
【中文标题】如何停止多次接收相同的短信?【英文标题】:How to stop receiving same SMS multiple times? 【发布时间】:2016-08-08 11:14:29 【问题描述】:我在一个消息应用程序中构建了以下 Receiver 类,它可以随时接收 SMS 消息:
public class Receiver extends BroadcastReceiver
public void onReceive(Context context, Intent intent)
Bundle extras = intent.getExtras();
SmsMessage[] smgs = null;
String infoSender = "";
String infoSMS = "";
if (extras != null)
// Retrieve the sms message received
Object[] pdus = (Object[]) extras.get("pdus");
smgs = new SmsMessage[pdus.length];
for (int i = 0; i < smgs.length; i++)
smgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
infoSender += smgs[i].getOriginatingAddress();
infoSMS += smgs[i].getMessageBody().toString();
它的问题是它有时会多次收到相同的消息,所以我怀疑这是因为接收者没有取消注册和销毁,因此它过于频繁地检查传入的消息。
因此,我尝试实现这个典型的接收器类:
public class myReceiver extends MainActivity
BroadcastReceiver ReceiverOne = null;
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
IntentFilter filter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
ReceiverOne = new BroadcastReceiver()
@Override
public void onReceive(Context arr0, Intent arr1)
processReceive(arr0, arr1);
;
registerReceiver(ReceiverOne, filter);
protected void onDestroy()
super.onDestroy();
unregisterReceiver(ReceiverOne);
但现在,ReceiverOne 从未使用过,因为此类没有布局,因此从未调用过。有没有办法把这两个接收器结合起来?
或者更好的是,关于为什么第一个接收者多次收到一些 SMS 消息,有人有什么更好的建议吗?
【问题讨论】:
【参考方案1】:这是您的解决方案 获取消息并将其添加到 StringBuilder
以明确为什么您一次又一次地收到 getOriginatingAddress
对于所有短信部分都是一样的。
public class Receiver extends BroadcastReceiver
public void onReceive(Context context, Intent intent)
if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
Bundle extras = intent.getExtras();
SmsMessage[] smgs = null;
String infoSender = "";
String infoSMS = "";
if (extras != null)
// Retrieve the sms message received
Object[] pdus = (Object[]) extras.get("pdus");
smgs = new SmsMessage[pdus.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < smgs.length; i++)
smgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sb.append(smgs[i].getMessageBody());
infoSender = smgs[0].getOriginatingAddress();
infoSMS = sb.toString();
【讨论】:
恐怕没有 - 它仍然收到多次。 @BlackHedgehog 检查更新的答案我添加了一个新检查..if (intent.getAction().equals("android.provider.Telephony.SMS_RECEIVED"))
@BlackHedgehog 你的问题解决了吗?
不,我不知道。您认为问题是什么?
@BlackHedgehog 你的问题几乎解决了你错过了什么。以上是关于如何停止多次接收相同的短信?的主要内容,如果未能解决你的问题,请参考以下文章