优化短信处理的代码

hdrplus
Matthew 11 months ago
parent c91c046003
commit b191f10df5

@ -45,7 +45,7 @@ public class SimUtil {
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED"; public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
public static final String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER"; public static final String SMS_DELIVER_ACTION = "android.provider.Telephony.SMS_DELIVER";
//自定义ACTION常数 作为广播的IntentFilter识别常数 // 自定义ACTION常数 作为广播的IntentFilter识别常数
public static String SMS_SEND_ACTION = "com.xypower.mpmaster.SMS_SEND_ACTION"; public static String SMS_SEND_ACTION = "com.xypower.mpmaster.SMS_SEND_ACTION";
public static String SMSTYPE = "smstype"; public static String SMSTYPE = "smstype";
@ -53,8 +53,8 @@ public class SimUtil {
public static String SMSIFCORRECT = "smsifcorrect"; public static String SMSIFCORRECT = "smsifcorrect";
//短信解析 //短信解析
public static void analysisSMSInfo(Intent intent, Context context) { public static void analysisSMSInfo(final Context context, final Intent intent, final SmsMessage smsMessage) {
SmsMessageModel smsInfo = getSMSInfo(intent); SmsMessageModel smsInfo = getSMSInfo(intent, smsMessage);
if (smsInfo != null) { if (smsInfo != null) {
String packageName = context.getApplicationContext().getPackageName(); String packageName = context.getApplicationContext().getPackageName();
String content = smsInfo.getContent(); String content = smsInfo.getContent();
@ -71,15 +71,15 @@ public class SimUtil {
ifmessageCorrect = true; ifmessageCorrect = true;
sendtype = SmsTypeEnum.REBOOT1.value(); sendtype = SmsTypeEnum.REBOOT1.value();
sendmessage = getSendString(content, ifmessageCorrect); sendmessage = getSendString(content, ifmessageCorrect);
} else if (content.contains(SmsTypeEnum.REBOOT2.value())) { } else if (content.contains(SmsTypeEnum.REBOOT2.value()) || content.contains(SmsTypeEnum.REBOOT3.value())) {
ifmessageCorrect = true; ifmessageCorrect = true;
sendtype = SmsTypeEnum.REBOOT2.value(); sendtype = SmsTypeEnum.REBOOT2.value();
sendmessage = getSendString(content, ifmessageCorrect); sendmessage = getSendString(content, ifmessageCorrect);
} else if (content.contains(SmsTypeEnum.RESTART_MP.value())) { } else if (content.contains(SmsTypeEnum.RESTART_MP.value()) || content.contains(SmsTypeEnum.RESTART_MP2.value())) {
ifmessageCorrect = true; ifmessageCorrect = true;
sendtype = SmsTypeEnum.RESTART_MP.value(); sendtype = SmsTypeEnum.RESTART_MP.value();
sendmessage = getSendString(content, ifmessageCorrect); sendmessage = getSendString(content, ifmessageCorrect);
} else if (content.contains(SmsTypeEnum.RESTART_MPMST.value())) { } else if (content.contains(SmsTypeEnum.RESTART_MPMST.value()) || content.contains(SmsTypeEnum.RESTART_MPMST2.value())) {
ifmessageCorrect = true; ifmessageCorrect = true;
sendtype = SmsTypeEnum.RESTART_MPMST.value(); sendtype = SmsTypeEnum.RESTART_MPMST.value();
sendmessage = getSendString(content, ifmessageCorrect); sendmessage = getSendString(content, ifmessageCorrect);
@ -658,39 +658,27 @@ public class SimUtil {
} }
//短信解析 //短信解析
public static SmsMessageModel getSMSInfo(Intent intent) { public static SmsMessageModel getSMSInfo(final Intent intent, final SmsMessage smsMessage) {
SmsMessageModel smsMessageModel = new SmsMessageModel(); SmsMessageModel smsMessageModel = new SmsMessageModel();
String action = intent.getAction();
if (SMS_RECEIVED_ACTION.equals(action) || SMS_DELIVER_ACTION.equals(action)) {
Bundle bundle = intent.getExtras();
if (bundle != null) {
StringBuilder content = new StringBuilder(); StringBuilder content = new StringBuilder();
String sender = ""; String sender = "";
String dateContent = ""; String dateContent = "";
Object[] pdus = (Object[]) bundle.get("pdus");
if (pdus != null && pdus.length > 0) { content.append(smsMessage.getMessageBody());// 得到短信内容
SmsMessage[] messages = new SmsMessage[pdus.length];
for (int i = 0; i < pdus.length; i++) {
byte[] pdu = (byte[]) pdus[i];
messages[i] = SmsMessage.createFromPdu(pdu);
}
for (SmsMessage message : messages) {
content.append(message.getMessageBody());// 得到短信内容
// 得到发信息的号码 // 得到发信息的号码
sender = message.getOriginatingAddress(); sender = smsMessage.getOriginatingAddress();
Date date = new Date(message.getTimestampMillis()); Date date = new Date(smsMessage.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
format.setTimeZone(TimeZone.getTimeZone("GMT+08:00")); format.setTimeZone(TimeZone.getTimeZone("GMT+08:00"));
dateContent = format.format(date); dateContent = format.format(date);
}
int smsSlot = getSmsSlot(bundle); // smsMessage.getIndexOnSim()
int smsSlot = getSmsSlot(intent.getExtras());
smsMessageModel.setContent(content.toString()); smsMessageModel.setContent(content.toString());
smsMessageModel.setSender(sender); smsMessageModel.setSender(sender);
smsMessageModel.setDateContent(dateContent); smsMessageModel.setDateContent(dateContent);
smsMessageModel.setSlot(smsSlot); smsMessageModel.setSlot(smsSlot);
}
}
}
return smsMessageModel; return smsMessageModel;
} }

@ -1,8 +1,17 @@
package com.xypower.mpmaster.sms; package com.xypower.mpmaster.sms;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.ContentValues;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Telephony;
import android.telephony.SmsMessage;
import android.util.Log;
import java.text.SimpleDateFormat;
import java.util.Date;
/** /**
* 广 * 广
@ -11,9 +20,43 @@ import android.content.Intent;
*/ */
public class SmsReceiver extends BroadcastReceiver { public class SmsReceiver extends BroadcastReceiver {
public static final String SMS_BUNDLE = "pdus";
public static long mLastSmsTime = System.currentTimeMillis();
private static final SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
@Override @Override
public void onReceive(Context context, Intent intent) { public void onReceive(Context context, Intent intent) {
SimUtil.analysisSMSInfo(intent,context); try {
if (intent.getAction().equals(Telephony.Sms.Intents.SMS_RECEIVED_ACTION)) {
SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
for (SmsMessage smsMessage : smsMessages) {
if (smsMessage.getTimestampMillis() < mLastSmsTime) {
Date dt = new Date(smsMessage.getTimestampMillis());
Log.i("SMS", "MSG @" + mSimpleDateFormat.format(dt) + " Dropped: " + smsMessage.getMessageBody());
continue;
}
mLastSmsTime = smsMessage.getTimestampMillis();
SimUtil.analysisSMSInfo(context, intent, smsMessage);
// smsMessage.get
String smsMessageId = "";
ContentValues values = new ContentValues();
values.put("read",true);
context.getContentResolver().update(Uri.parse("content://sms/inbox"),values,
"_id=" + smsMessageId, null);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
} }

@ -38,6 +38,11 @@ public class SmsSendReceiver extends BroadcastReceiver {
Thread th = new Thread(new Runnable() { Thread th = new Thread(new Runnable() {
@Override @Override
public void run() { public void run() {
try {
Thread.sleep(1000);
} catch (Exception ex) {
ex.printStackTrace();
}
try { try {
processSms(context, intent, action, type); processSms(context, intent, action, type);
} catch (Exception ex) { } catch (Exception ex) {

@ -2,8 +2,11 @@ package com.xypower.mpmaster.sms;
public enum SmsTypeEnum { public enum SmsTypeEnum {
REBOOT1("yw+at+stw21"), REBOOT2("at+stw21"), //重启命令 REBOOT1("yw+at+stw21"), REBOOT2("at+stw21"), //重启命令
REBOOT3("at-stw21"), //重启命令
RESTART_MP("at+restart=mpapp"), RESTART_MP("at+restart=mpapp"),
RESTART_MP2("at-restart=mpapp"),
RESTART_MPMST("at+restart=mpmaster"), RESTART_MPMST("at+restart=mpmaster"),
RESTART_MPMST2("at-restart=mpmaster"),
SET_YW_SCHEDULE("yw+at+stw51"), //拍照时间表设置 SET_YW_SCHEDULE("yw+at+stw51"), //拍照时间表设置
GET_YW_SCHEDULE("yw+at+str51"), //查询拍照时间表 GET_YW_SCHEDULE("yw+at+str51"), //查询拍照时间表
SET_OPERATE("yw+at+stw52"), //设置运维开关 SET_OPERATE("yw+at+stw52"), //设置运维开关

Loading…
Cancel
Save