优化:转发未接来电获取卡槽信息机制(延时:挂断后1秒)

This commit is contained in:
pppscn 2021-11-25 14:44:25 +08:00
parent 2f5215caec
commit 2dd7c75eda
2 changed files with 60 additions and 38 deletions

View File

@ -41,12 +41,23 @@ public class PhoneStateReceiver extends BroadcastReceiver {
int state = mTelephonyManager.getCallState(); int state = mTelephonyManager.getCallState();
Log.d(TAG, "来电信息state=" + state + " phoneNumber = " + phoneNumber); Log.d(TAG, "来电信息state=" + state + " phoneNumber = " + phoneNumber);
switch (state) { switch (state) {
//包括响铃第三方来电等待
case TelephonyManager.CALL_STATE_RINGING: case TelephonyManager.CALL_STATE_RINGING:
break;
//空闲态(没有通话活动)
case TelephonyManager.CALL_STATE_IDLE:
if (!TextUtils.isEmpty(phoneNumber)) { if (!TextUtils.isEmpty(phoneNumber)) {
try {
//必须休眠才能获取来电记录
Thread.sleep(1000);
sendReceiveCallMsg(context, phoneNumber); sendReceiveCallMsg(context, phoneNumber);
} catch (InterruptedException e) {
e.printStackTrace();
}
} }
break; break;
case TelephonyManager.CALL_STATE_IDLE: //包括dialing拨号中active接通hold挂起等
case TelephonyManager.CALL_STATE_OFFHOOK: case TelephonyManager.CALL_STATE_OFFHOOK:
break; break;
} }
@ -56,36 +67,34 @@ public class PhoneStateReceiver extends BroadcastReceiver {
} }
private void sendReceiveCallMsg(Context context, String phoneNumber) { private void sendReceiveCallMsg(Context context, String phoneNumber) {
int simId = 0;
String name = "";
String simInfo = "";
//获取后一条通话记录 //获取后一条通话记录
CallInfo callInfo = PhoneUtils.getLastCallInfo(); CallInfo callInfo = PhoneUtils.getLastCallInfo(phoneNumber);
if (callInfo != null) { if (callInfo == null) return;
Log.d(TAG, callInfo.toString());
simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId()); if (callInfo.getType() != 3) {
//自定义备注优先 Log.d(TAG, "非未接来电不处理!");
simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); return;
}
String name = callInfo.getName();
int simId = SimUtil.getSimIdBySubscriptionId(callInfo.getSubscriptionId());
String simInfo = simId == 2 ? SettingUtil.getAddExtraSim2() : SettingUtil.getAddExtraSim1(); //自定义备注优先
if (!simInfo.isEmpty()) { if (!simInfo.isEmpty()) {
simInfo = "SIM" + simId + "_" + simInfo; simInfo = "SIM" + simId + "_" + simInfo;
} else { } else {
simInfo = SimUtil.getSimInfo(simId); simInfo = SimUtil.getSimInfo(simId);
} }
name = callInfo.getName(); if (TextUtils.isEmpty(name)) {
} else {
List<PhoneBookEntity> contacts = ContactHelper.getInstance().getContactByNumber(context, phoneNumber); List<PhoneBookEntity> contacts = ContactHelper.getInstance().getContactByNumber(context, phoneNumber);
if (contacts != null && contacts.size() > 0) { if (contacts != null && contacts.size() > 0) {
PhoneBookEntity phoneBookEntity = contacts.get(0); PhoneBookEntity phoneBookEntity = contacts.get(0);
name = phoneBookEntity.getName(); 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); SmsVo smsVo = new SmsVo(phoneNumber, name + context.getString(R.string.calling), new Date(), simInfo);
Log.d(TAG, "send_msg" + smsVo.toString()); Log.d(TAG, "send_msg" + smsVo.toString());
SendUtil.send_msg(context, smsVo, simId, "call"); SendUtil.send_msg(context, smsVo, simId, "call");

View File

@ -533,11 +533,12 @@ public class PhoneUtils {
/** /**
* 获取后一条通话记录 * 获取后一条通话记录
*/ */
public static CallInfo getLastCallInfo() { public static CallInfo getLastCallInfo(String phoneNumber) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
return null; return null;
} }
try {
String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人 String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人
, CallLog.Calls.NUMBER// 通话记录的电话号码 , CallLog.Calls.NUMBER// 通话记录的电话号码
, CallLog.Calls.DATE// 通话记录的日期 , CallLog.Calls.DATE// 通话记录的日期
@ -546,9 +547,15 @@ public class PhoneUtils {
, CallLog.Calls.PHONE_ACCOUNT_ID , CallLog.Calls.PHONE_ACCOUNT_ID
}; };
@SuppressLint("Recycle") Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE + " DESC"); 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()) { while (cursor.moveToNext()) {
return new CallInfo( callInfo = new CallInfo(
cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)), //姓名 cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)), //姓名
cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)), //号码 cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)), //号码
cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期 cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期
@ -556,6 +563,12 @@ public class PhoneUtils {
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型1.呼入2.呼出3.未接 cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型1.呼入2.呼出3.未接
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID)) 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; return null;