From 2dd7c75eda840a80bfff1ea53287357f5f3bb8cc Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Thu, 25 Nov 2021 14:44:25 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E8=BD=AC=E5=8F=91?= =?UTF-8?q?=E6=9C=AA=E6=8E=A5=E6=9D=A5=E7=94=B5=E8=8E=B7=E5=8F=96=E5=8D=A1?= =?UTF-8?q?=E6=A7=BD=E4=BF=A1=E6=81=AF=E6=9C=BA=E5=88=B6=EF=BC=88=E5=BB=B6?= =?UTF-8?q?=E6=97=B6=EF=BC=9A=E6=8C=82=E6=96=AD=E5=90=8E1=E7=A7=92?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../receiver/PhoneStateReceiver.java | 49 ++++++++++-------- .../sms/forwarder/utils/PhoneUtils.java | 51 ++++++++++++------- 2 files changed, 61 insertions(+), 39 deletions(-) diff --git a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java index 5a8dfd4b..64754fb0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java +++ b/app/src/main/java/com/idormy/sms/forwarder/receiver/PhoneStateReceiver.java @@ -41,12 +41,23 @@ public class PhoneStateReceiver extends BroadcastReceiver { int state = mTelephonyManager.getCallState(); Log.d(TAG, "来电信息:state=" + state + " phoneNumber = " + phoneNumber); switch (state) { + //包括响铃、第三方来电等待 case TelephonyManager.CALL_STATE_RINGING: + break; + //空闲态(没有通话活动) + case TelephonyManager.CALL_STATE_IDLE: if (!TextUtils.isEmpty(phoneNumber)) { - sendReceiveCallMsg(context, phoneNumber); + try { + //必须休眠才能获取来电记录 + Thread.sleep(1000); + + sendReceiveCallMsg(context, phoneNumber); + } catch (InterruptedException e) { + e.printStackTrace(); + } } break; - case TelephonyManager.CALL_STATE_IDLE: + //包括dialing拨号中、active接通、hold挂起等 case TelephonyManager.CALL_STATE_OFFHOOK: break; } @@ -56,36 +67,34 @@ public class PhoneStateReceiver extends BroadcastReceiver { } private void sendReceiveCallMsg(Context context, String phoneNumber) { - int simId = 0; - String name = ""; - String simInfo = ""; //获取后一条通话记录 - CallInfo callInfo = PhoneUtils.getLastCallInfo(); - if (callInfo != null) { - Log.d(TAG, callInfo.toString()); + CallInfo callInfo = PhoneUtils.getLastCallInfo(phoneNumber); + if (callInfo == null) return; - simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId()); - //自定义备注优先 - simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); - if (!simInfo.isEmpty()) { - simInfo = "SIM" + simId + "_" + simInfo; - } else { - simInfo = SimUtil.getSimInfo(simId); - } + if (callInfo.getType() != 3) { + Log.d(TAG, "非未接来电不处理!"); + return; + } - name = callInfo.getName(); + String name = callInfo.getName(); + int simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId()); + String simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); //自定义备注优先 + if (!simInfo.isEmpty()) { + simInfo = "SIM" + simId + "_" + simInfo; } else { + simInfo = SimUtil.getSimInfo(simId); + } + + if (TextUtils.isEmpty(name)) { List contacts = ContactHelper.getInstance().getContactByNumber(context, phoneNumber); if (contacts != null && contacts.size() > 0) { PhoneBookEntity phoneBookEntity = contacts.get(0); name = phoneBookEntity.getName(); } + if (TextUtils.isEmpty(name)) name = context.getString(R.string.unknown_number); } - if (TextUtils.isEmpty(name)) { - name = context.getString(R.string.unknown_number); - } SmsVo smsVo = new SmsVo(phoneNumber, name + context.getString(R.string.calling), new Date(), simInfo); Log.d(TAG, "send_msg" + smsVo.toString()); SendUtil.send_msg(context, smsVo, simId, "call"); diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java index 15c92f11..e777d8ce 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/PhoneUtils.java @@ -533,29 +533,42 @@ public class PhoneUtils { /** * 获取后一条通话记录 */ - public static CallInfo getLastCallInfo() { + public static CallInfo getLastCallInfo(String phoneNumber) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { return null; } - String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人 - , CallLog.Calls.NUMBER// 通话记录的电话号码 - , CallLog.Calls.DATE// 通话记录的日期 - , CallLog.Calls.DURATION// 通话时长 - , CallLog.Calls.TYPE// 通话类型 - , CallLog.Calls.PHONE_ACCOUNT_ID - }; - - @SuppressLint("Recycle") Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC"); - while (cursor.moveToNext()) { - return new CallInfo( - cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)), //姓名 - cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)), //号码 - cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期 - cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)),//获取通话时长,值为多少秒 - cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型:1.呼入2.呼出3.未接 - cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID)) - ); + try { + String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人 + , CallLog.Calls.NUMBER// 通话记录的电话号码 + , CallLog.Calls.DATE// 通话记录的日期 + , CallLog.Calls.DURATION// 通话时长 + , CallLog.Calls.TYPE// 通话类型 + , CallLog.Calls.PHONE_ACCOUNT_ID + }; + + CallInfo callInfo; + Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, + CallLog.Calls.NUMBER + " like ?", + new String[]{phoneNumber + "%"}, CallLog.Calls.DEFAULT_SORT_ORDER); + Log.i(TAG, "cursor count:" + cursor.getCount()); + + //noinspection LoopStatementThatDoesntLoop + while (cursor.moveToNext()) { + callInfo = new CallInfo( + cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)), //姓名 + cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)), //号码 + cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期 + cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)),//获取通话时长,值为多少秒 + cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型:1.呼入2.呼出3.未接 + cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID)) + ); + Log.d(TAG, callInfo.toString()); + cursor.close(); + return callInfo; + } + } catch (Exception e) { + Log.e(TAG, "getLastCallInfo:", e); } return null;