|
|
@ -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)) {
|
|
|
|
sendReceiveCallMsg(context, phoneNumber);
|
|
|
|
try {
|
|
|
|
|
|
|
|
//必须休眠才能获取来电记录
|
|
|
|
|
|
|
|
Thread.sleep(1000);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
|
|
|
|
if (!simInfo.isEmpty()) {
|
|
|
|
}
|
|
|
|
simInfo = "SIM" + simId + "_" + simInfo;
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
simInfo = SimUtil.getSimInfo(simId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 {
|
|
|
|
} else {
|
|
|
|
|
|
|
|
simInfo = SimUtil.getSimInfo(simId);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (TextUtils.isEmpty(name)) {
|
|
|
|
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");
|
|
|
|