From 05cc5c72f86b08eb8c21cee2e5a57c2271f5a3f3 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Wed, 19 Mar 2025 08:48:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=81=94=E7=B3=BB=E4=BA=BA?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=EF=BC=8C=E5=9C=A8=E8=81=94=E7=B3=BB=E4=BA=BA?= =?UTF-8?q?=E5=90=8D=E5=8D=95=E5=86=85=E5=B0=B1=E5=85=81=E8=AE=B8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contacts/build.properties | 4 +- .../cc/winboll/studio/contacts/dun/Rules.java | 16 ++++- .../studio/contacts/utils/ContactUtils.java | 60 ++++++++++++++----- 3 files changed, 61 insertions(+), 19 deletions(-) diff --git a/contacts/build.properties b/contacts/build.properties index bcf48e6..1b481a2 100644 --- a/contacts/build.properties +++ b/contacts/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 09 20:33:54 HKT 2025 +#Wed Mar 19 00:46:03 GMT 2025 stageCount=20 libraryProject= baseVersion=1.0 publishVersion=1.0.19 -buildCount=0 +buildCount=12 baseBetaVersion=1.0.20 diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/dun/Rules.java b/contacts/src/main/java/cc/winboll/studio/contacts/dun/Rules.java index b3b9788..cc7870a 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/dun/Rules.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/dun/Rules.java @@ -6,12 +6,11 @@ package cc.winboll.studio.contacts.dun; * @Describe 云盾防御规则 */ import android.content.Context; -import android.media.AudioManager; import cc.winboll.studio.contacts.activities.SettingsActivity; import cc.winboll.studio.contacts.beans.PhoneConnectRuleModel; -import cc.winboll.studio.contacts.beans.RingTongBean; import cc.winboll.studio.contacts.beans.SettingsModel; import cc.winboll.studio.contacts.services.MainService; +import cc.winboll.studio.contacts.utils.ContactUtils; import cc.winboll.studio.contacts.utils.RegexPPiUtils; import cc.winboll.studio.libappbase.LogUtils; import java.util.ArrayList; @@ -125,6 +124,19 @@ public class Rules { LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); } + // 查询通讯录是否有该联系人 + boolean isPhoneInContacts = ContactUtils.getInstance(mContext).isPhoneInContacts(mContext, phoneNumber); + if (!isDefend) { + if (isPhoneInContacts) { + LogUtils.d(TAG, String.format("Phone %s is in contacts.", phoneNumber)); + isDefend = true; + isConnect = true; + LogUtils.d(TAG, String.format("isDefend == %s\nisConnect == %s", isDefend, isConnect)); + } else { + LogUtils.d(TAG, String.format("Phone %s is not in contacts.", phoneNumber)); + } + } + // 检验拨不通号码群 if (!isDefend && MainService.isPhoneInBoBullToon(phoneNumber)) { LogUtils.d(TAG, String.format("PhoneNumber %s\n Is In BoBullToon", phoneNumber)); diff --git a/contacts/src/main/java/cc/winboll/studio/contacts/utils/ContactUtils.java b/contacts/src/main/java/cc/winboll/studio/contacts/utils/ContactUtils.java index e94a647..201b29c 100644 --- a/contacts/src/main/java/cc/winboll/studio/contacts/utils/ContactUtils.java +++ b/contacts/src/main/java/cc/winboll/studio/contacts/utils/ContactUtils.java @@ -1,16 +1,18 @@ package cc.winboll.studio.contacts.utils; -import android.content.ContentResolver; -import android.content.Context; -import android.database.Cursor; -import android.provider.ContactsContract; -import java.util.HashMap; -import java.util.Map; /** * @Author ZhanGSKen@AliYun.Com * @Date 2025/03/06 21:08:16 * @Describe ContactUtils */ +import android.content.ContentResolver; +import android.content.Context; +import android.database.Cursor; +import android.provider.ContactsContract; +import cc.winboll.studio.libappbase.LogUtils; +import java.util.HashMap; +import java.util.Map; + public class ContactUtils { public static final String TAG = "ContactUtils"; @@ -59,34 +61,62 @@ public class ContactUtils { // static String getSimplePhone(String phone) { // return phone.replaceAll("[+\\s]", ""); // } - + public static String formatToSimplePhoneNumber(String number) { // 去除所有空格和非数字字符 return number.replaceAll("[^0-9]", ""); } - + public static String getDisplayNameByPhone(Context context, String phoneNumber) { String displayName = null; ContentResolver resolver = context.getContentResolver(); String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}; - Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{formatToSimplePhoneNumber(phoneNumber)}, null); - if (cursor!= null && cursor.moveToFirst()) { + Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{phoneNumber}, null); + if (cursor != null && cursor.moveToFirst()) { displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); cursor.close(); } return displayName; } - + + public static String getDisplayNameByPhoneSimple(Context context, String phoneNumber) { + String displayName = null; + ContentResolver resolver = context.getContentResolver(); + String[] projection = {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME}; + Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.NUMBER + "=?", new String[]{formatToSimplePhoneNumber(phoneNumber)}, null); + if (cursor != null && cursor.moveToFirst()) { + displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); + cursor.close(); + } + return displayName; + } + + public static boolean isPhoneInContacts(Context context, String phoneNumber) { + String szPhoneNumber = formatToSimplePhoneNumber(phoneNumber); + String szDisplayName = getDisplayNameByPhone(context, szPhoneNumber); + if (szDisplayName == null) { + LogUtils.d(TAG, String.format("Phone %s is not in contacts.", szPhoneNumber)); + szPhoneNumber = formatToSpacePhoneNumber(szPhoneNumber); + szDisplayName = getDisplayNameByPhone(context, szPhoneNumber); + if (szDisplayName == null) { + LogUtils.d(TAG, String.format("Phone %s is not in contacts.", szPhoneNumber)); + return false; + } + } + LogUtils.d(TAG, String.format("Phone %s is found in contacts %s.", szPhoneNumber, szDisplayName)); + return true; + } + public static String formatToSpacePhoneNumber(String simpleNumber) { // 去除所有空格和非数字字符 StringBuilder sbSpaceNumber = new StringBuilder(); String regex = "^1[0-9]{10}$"; - if(simpleNumber.matches(regex)) { - sbSpaceNumber.append(simpleNumber.substring(0,2)); + if (simpleNumber.matches(regex)) { + sbSpaceNumber.append(simpleNumber.substring(0, 3)); sbSpaceNumber.append(" "); - sbSpaceNumber.append(simpleNumber.substring(3,6)); + sbSpaceNumber.append(simpleNumber.substring(3, 7)); sbSpaceNumber.append(" "); - sbSpaceNumber.append(simpleNumber.substring(7,10)); + sbSpaceNumber.append(simpleNumber.substring(7, 11)); } return sbSpaceNumber.toString(); }