android 4行代码解析短信内容(全手动)
主要内容如下
- 注册接收短信的广播接收者
- 获得短信内容
- 解析短信内容
关于第一点注册广播接收者我想大家应该都了解,我就不多说了,如果没接触过广播接收者话还是建议以后再看这篇文章;
第二点 获得短信内容,先贴上官方介绍
public void onReceive( Context context, Intent intent)
官方介绍就是,当设备接受到短信时,Intent将会把短信传递给所有注册了接收短信的广播接收者,上面是所有广播接收者的onReceive(),我们便可以通过intent获得短信内容。
那么问题来了,怎么通过Intent获得短信内容呢? 上面也说了 获得由包含PDUS的字节数组可以通过 getMessageFromIntent(Intent), 而这个方法又是 Intents的静态方法。
所以我我们就可以通过 Intents.getMessageFromIntent(intent) 这个来过的Message
这是第一行代码:
SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent);
第三点:解析短信内容,第一步获取短信内容,第二步获取短信发送号码,这两个都可以通过smsMessage的方法获得。我们在上一步获得了SmsMessage[],
通过getMessageBody() 可以获得短信体也就是短信内容
通过getOriginatingAddress() 可以获得短信来源也就是发送人号码
,因为我们获得的是一个数组,所以我们要便利数组
接下来是 第二第三第四行代码
for (SmsMessage smsMessage :messagesFromIntent){
String body = smsMessage.getMessageBody();
String sender = smsMessage.getOriginatingAddress();
最后贴上四行全部代码
private Map<String, String> parseSMS(Intent intent) {
Map<String, String> map = new HashMap();
SmsMessage[] messagesFromIntent = Telephony.Sms.Intents.getMessagesFromIntent(intent);
for (SmsMessage smsMessage :messagesFromIntent){
String body = smsMessage.getMessageBody();
String sender = smsMessage.getOriginatingAddress();
map.put("body", body);
map.put("sender", sender);
}