最近需要添加联系人黑名单功能,涉及到电话拦截,在CallsManager.java中有如下方法:
@Override
public void onSuccessfulIncomingCall(Call incomingCall) {
CallerInfo callerInfo = incomingCall.getCallerInfo();
setCallState(incomingCall, CallState.RINGING, "successful incoming call");
// begin - Call blocking to phone number in blacklist.
if (callerInfo != null && !TextUtils.isEmpty(callerInfo.phoneNumber) && BlacklistUtils.isBlacked(mContext, callerInfo.phoneNumber)) {
// 写入通话记录,BLACKLIST_TYPE 标明是被拦截的通话记录
mCallLogManager.logCall(incomingCall, Calls.BLACKLIST_TYPE);
// Async update blacklist table.
new android.os.AsyncTask<CallerInfo,Integer,Boolean>() {
@Override
protected Boolean doInBackground(CallerInfo[] params) {
CallerInfo localCallerInfo = params[0];
Boolean update = BlacklistUtils.updateCallBlockedTimes(mContext, localCallerInfo.phoneNumber);
return update;
}
@Override
protected void onPostExecute(Boolean update) {
super.onPostExecute(update);
Log.d(this, "updateCallBlockedTimes, update: " + update);
}
}.execute(callerInfo);
incomingCall.reject(false, null);
}
// - blocking end.
else if (hasEmergencyCall() || hasMaximumRingingCalls() || hasMaximumDialingCalls()
|| shouldBlockFor3GVT(incomingCall.isVideoCall())) {
incomingCall.reject(false, null);
mMissedCallNotifier.showMissedCallNotification(incomingCall);
mCallLogManager.logCall(incomingCall, Calls.MISSED_TYPE);
} else {
addCall(incomingCall);
}
}
本文介绍了一种在CallsManager中实现电话黑名单拦截的方法。当接收到成功呼入的电话时,系统会检查来电者信息是否存在于黑名单中。如果存在,则记录通话为拦截状态并更新黑名单中的拦截次数。

1万+

被折叠的 条评论
为什么被折叠?



