我正在编写一个通过短信与其他设备通信的应用程序。
我能够为收到的短信实现一个监听器。问题在于它正在收听所有收到的消息。我想只收听特定号码的收到的短信。
这是我的onReceive
方法。
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle bundle = intent.getExtras();
Object messages[] = (Object[]) bundle.get("pdus");
SmsMessage smsMessage[] = new SmsMessage[messages.length];
for (int n = 0; n < messages.length; n++) {
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]);
}
// show first message
Toast toast = Toast.makeText(context,
"Received SMS: " + smsMessage[0].getMessageBody(),
Toast.LENGTH_LONG);
toast.show();
}
答案 0 :(得分:4)
使用PhoneNumberUtils.compare()比较电话号码,因为有不同的电话号码格式(+ 4XXXX,0XXXX ...)。您可以通过getOriginatingAddress()获取发件人。
public class SmsReceiver extends BroadcastReceiver {
private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
// get sms objects
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus.length == 0) {
return;
}
// large message might be broken into many
SmsMessage[] messages = new SmsMessage[pdus.length];
StringBuilder sb = new StringBuilder();
for (int i = 0; i < pdus.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
sb.append(messages[i].getMessageBody());
}
String sender = messages[0].getOriginatingAddress();
String message = sb.toString();
// apply sms filter
if (PhoneNumberUtils.compare("your number", sender)) {
// do something
}
}
}
}
答案 1 :(得分:4)
AFAIK无法通过意图来过滤数字。
您可以做的是在接收器中获取电话号码,如下所示:
SMSMesssage msg=SMSMessage.creatFromPdu(pdu)
String origination_no = msg.getDisplayOriginatingAddress()
答案 2 :(得分:3)
使用此
for(int i=0; i<smsMessage.length; i++) {
smsMessage[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
String msg_from = msgs[i].getOriginatingAddress();
Log.v("msg_from >>",msg_from);
if(msg_from.equals("1234556"))
{
//do you stuff here.
}
}
答案 3 :(得分:1)
您可以使用message.getOriginatingAddress()
获取收到邮件的号码,并根据您获得的地址进行进一步计算。
答案 4 :(得分:1)
我担心您无法避免收到您收到的任何短信的通知。
但是,您可以丢弃任何不符合您感兴趣的数字的短信。
您可以致电
获取电话号码来自= smsMessage [i] .getOriginatingAddress();
的字符串
答案 5 :(得分:0)
对于那些拥有此creatFromPdu
的人,请弃用我们对实际api和旧api的验证....
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
String format = bundle.getString("format");
currentSMS = SmsMessage.createFromPdu((byte[]) aObject, format);
} else {
currentSMS = SmsMessage.createFromPdu((byte[]) aObject);
}
(source)