优化:转发未接来电获取卡槽信息机制(延时:挂断后1秒)
This commit is contained in:
parent
2f5215caec
commit
2dd7c75eda
|
@ -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");
|
||||||
|
|
|
@ -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) {
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人
|
try {
|
||||||
, CallLog.Calls.NUMBER// 通话记录的电话号码
|
String[] columns = {CallLog.Calls.CACHED_NAME// 通话记录的联系人
|
||||||
, CallLog.Calls.DATE// 通话记录的日期
|
, CallLog.Calls.NUMBER// 通话记录的电话号码
|
||||||
, CallLog.Calls.DURATION// 通话时长
|
, CallLog.Calls.DATE// 通话记录的日期
|
||||||
, CallLog.Calls.TYPE// 通话类型
|
, CallLog.Calls.DURATION// 通话时长
|
||||||
, CallLog.Calls.PHONE_ACCOUNT_ID
|
, 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");
|
CallInfo callInfo;
|
||||||
while (cursor.moveToNext()) {
|
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI, null,
|
||||||
return new CallInfo(
|
CallLog.Calls.NUMBER + " like ?",
|
||||||
cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)), //姓名
|
new String[]{phoneNumber + "%"}, CallLog.Calls.DEFAULT_SORT_ORDER);
|
||||||
cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)), //号码
|
Log.i(TAG, "cursor count:" + cursor.getCount());
|
||||||
cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)), //获取通话日期
|
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.DURATION)),//获取通话时长,值为多少秒
|
//noinspection LoopStatementThatDoesntLoop
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.TYPE)), //获取通话类型:1.呼入2.呼出3.未接
|
while (cursor.moveToNext()) {
|
||||||
cursor.getInt(cursor.getColumnIndex(CallLog.Calls.PHONE_ACCOUNT_ID))
|
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;
|
return null;
|
||||||
|
|
Loading…
Reference in New Issue