您的位置:首页 > 移动开发 > Android开发

Android开发监听指定号码发来的短信

2015-08-05 11:03 405 查看
项目中碰到的需要对固定端口发送过来的短信进行解析,并且根据短信的类容作出相应的行为。查了好久,网上也有大量的资料,但是感觉都不能满足自己的要求。最后把大家的方法都看了一下,最后糅合出适合自己的,可以实现对固定号码发过来的短息进行监听。

简单的说来就是写一个类继承自BroadCastReceiver,代码如下:

public class SmsBroadcastReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals(SMS_RECEIVED)) {
StringBuffer SmsAddress = new StringBuffer();
StringBuffer SmsContent = new StringBuffer();
Bundle bundle = intent.getExtras();
if (bundle != null) {
Object[] pdusObjects = (Object[]) bundle.get("pdus");
SmsMessage[] messages = new SmsMessage[pdusObjects.length];
for (int i = 0; i < pdusObjects.length; i++) {
messages[i] = SmsMessage.createFromPdu((byte[]) pdusObjects[i]);
}
for (SmsMessage message : messages) {
SmsAddress.append(message.getDisplayOriginatingAddress());
SmsContent.append(message.getDisplayMessageBody());

if (SmsAddress.toString().equals(strDestAddress)) {

}
}

}
}
}
}
我是直接写的一个内部类,所以有两个常亮是前面定义好了的,分别是:

private static String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";


private String strDestAddress = "15555215556";


其中strDestAddress表示你需要监听的指定号码。

这样在有新信息过来的时候就可以监听到了,监听到指定号码发过来的信息后如果再想做其他的事就写在

if (SmsAddress.toString().equals(strDestAddress)) {

}


最后,当然是不要忘了注册和添加权限。这里需要在mainfest.xml里面添加权限

<uses-permission android:name="android.permission.RECEIVE_SMS" />
注册的可以选择静态注册,也可以选择动态注册,这里我选择的是动态注册,并且把这个广播和Activity的生命周期进行绑定了。代码如下:
@Override
protected void onResume() {
IntentFilter mFilter01;
mFilter01 = new IntentFilter(SMS_RECEIVED);
smsReceiver = new SMSBroadcastReceiver();
registerReceiver(smsReceiver, mFilter01);

super.onResume();
}

@Override
protected void onPause() {
/* 取消注册自定义Receiver */
unregisterReceiver(smsReceiver);
super.onPause();
}


上面代码中的smsReceiver就定义的一个SmsBroadCastReceiver类型变量。

到这里就实现了对指定号码发过来的短信进行监听,但是还是觉得有所不足,如果有其他更好的方法的,麻烦告诉我一下。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: