From 44c8e5c057d1db821d4de11f63efab4127cb606b Mon Sep 17 00:00:00 2001 From: Matthew Date: Sat, 13 Jul 2024 10:53:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E9=80=81=E7=9F=AD=E4=BF=A1=E6=97=B6re?= =?UTF-8?q?questCode=E5=81=9A=E5=8F=98=E5=8C=96=EF=BC=8C=E9=81=BF=E5=85=8D?= =?UTF-8?q?=E9=87=8D=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/xypower/mpmaster/sms/SimUtil.java | 66 ++++++++++++++++++- .../com/xypower/mpmaster/sms/SmsReceiver.java | 16 ++--- 2 files changed, 70 insertions(+), 12 deletions(-) diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java index 1b27a3ad..fe7728ee 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SimUtil.java @@ -4,12 +4,16 @@ package com.xypower.mpmaster.sms; import android.Manifest; import android.app.Activity; import android.app.PendingIntent; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.database.Cursor; import android.net.ConnectivityManager; import android.net.Network; import android.net.NetworkInfo; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.telephony.SmsManager; @@ -18,10 +22,12 @@ import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; +import android.util.Log; import androidx.core.app.ActivityCompat; import com.dev.devapi.api.SysApi; +import com.xypower.common.FilesUtils; import com.xypower.common.MicroPhotoContext; import com.xypower.common.RegexUtil; import com.xypower.mpmaster.MpMasterService; @@ -35,6 +41,7 @@ import java.util.HashMap; import java.util.List; import java.util.Set; import java.util.TimeZone; +import java.util.concurrent.ExecutionException; /* @@ -52,6 +59,8 @@ public class SimUtil { public static String SMSIFCORRECT = "smsifcorrect"; + private static int mRequestCode = 1; + //短信解析 public static void analysisSMSInfo(final Context context, final Intent intent, final SmsMessage smsMessage) { SmsMessageModel smsInfo = getSMSInfo(intent, smsMessage); @@ -686,6 +695,61 @@ public class SimUtil { return smsMessageModel; } + public static void setSmsMessageRead(Context context, SmsMessage smsMessage) { + Cursor cursor = null; + try { + Uri uri = Uri.parse("content://sms/inbox"); + ContentResolver contentResolver = context.getContentResolver(); + + List smsIds = new ArrayList<>(); + String[] projection = new String[]{"_id", "address", "person", "body", "date", "read",}; + String selection = "date>" + Long.toString(smsMessage.getTimestampMillis() - 5000); + String sortOrder = null; // "date desc" + cursor = contentResolver.query(uri, projection, selection, null, sortOrder); + while (cursor.moveToNext()) { + String smsBody = cursor.getString(3); + String smsRead = cursor.getString(5); + if (TextUtils.equals(smsMessage.getMessageBody(), smsBody) && TextUtils.equals("0", smsRead)) { + smsIds.add(Long.valueOf(cursor.getLong(0))); + } + } + if (cursor != null) { + cursor.close(); + } + cursor = null; + + if (!smsIds.isEmpty()) { + uri = Uri.parse("content://sms/"); + ContentValues values = new ContentValues(); + values.put("read", "1"); + for (Long smsId : smsIds) { + // int rows = contentResolver.update(uri, values, "_id=?", new String[]{Long.toString(smsId)}); + int rows = contentResolver.delete(uri, "_id=?", new String[]{Long.toString(smsId)}); + if (rows == 1) { + Log.i("SMS", "Successfully"); + } + } + + contentResolver.notifyChange(uri, null); + } + } catch (Exception ex) { + ex.printStackTrace(); + } finally { + FilesUtils.closeFriendly(cursor); + } + } + + public static void clearSms(Context context) { + Cursor cursor = null; + try { + Uri uri = Uri.parse("content://sms"); + ContentResolver contentResolver = context.getContentResolver(); + contentResolver.delete(uri, "_id>0", null); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + //获取是哪个sim卡收到短信 private static int getSmsSlot(Bundle bundle) { int slot = -1; @@ -740,7 +804,7 @@ public class SimUtil { itSend.putExtra(SMSIFCORRECT, ifmessageCorrect); // itSend.putExtra(SMSDATA, (Serializable) jsonArray); //sendIntent参数为传送后接受的广播信息PendingIntent - PendingIntent sendPI = PendingIntent.getBroadcast(mContext, 0, itSend, 0); + PendingIntent sendPI = PendingIntent.getBroadcast(mContext, mRequestCode++, itSend, 0); // Intent itDeliver = new Intent(SMS_DELIVERED_ACTION); //deliveryIntent参数为传送后接受的广播信息PendingIntent diff --git a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java index e2053a72..0a1cad05 100644 --- a/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java +++ b/mpmaster/src/main/java/com/xypower/mpmaster/sms/SmsReceiver.java @@ -32,28 +32,22 @@ public class SmsReceiver extends BroadcastReceiver { SmsMessage[] smsMessages = Telephony.Sms.Intents.getMessagesFromIntent(intent); for (SmsMessage smsMessage : smsMessages) { + // Log.i("SMS", "RECV " + mSimpleDateFormat.format(dt) + " " + smsMessage.getMessageBody()); + if (smsMessage.getTimestampMillis() < mLastSmsTime) { + Date dt = new Date(smsMessage.getTimestampMillis()); Log.i("SMS", "MSG @" + mSimpleDateFormat.format(dt) + " Dropped: " + smsMessage.getMessageBody()); + SimUtil.setSmsMessageRead(context, smsMessage); 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); + // SimUtil.setSmsMessageRead(context, smsMessage); } } - - - - - } catch (Exception ex) { ex.printStackTrace(); }