第一种:直接删除
1、获得内容解析者
ContentResolver resolver = getContentResolver();
2、构造uri
Uri uri = Uri.parse("content://call_log/calls");
3、根据手机号码直接删除
resolver.delete(uri, "number=?", new String[]{incomingNumber});
第二种:监听存储通话记录的数据库的变化来删除
1、构造uri
Uri uri = Uri.parse("content://call_log/calls");
/*第二个参数,true 只要uri前面有匹配则默认发生变化 false要完全匹配*/
2、通过ContentResolve注册一个观察者
getContentResolver().registerContentObserver(uri, true, new CallLogObserver(incomingNumber, new Handler()
));
private class CallLogObserver extends ContentObserver {
private String incomingNumber;
/**
* Creates a content observer.
*
* @param handler The handler to run {@link #onChange} on, or null if none.
*/
//重写构造方法,传入一个号码
public CallLogObserver(String incomingNumber, Handler handler) {
super(handler);
this.incomingNumber = incomingNumber;
}
//数据发生变化时调用
@Override
public void onChange(boolean selfChange) {
Log.i(TAG, "数据库内容变化,产生呼叫记录");
deleteCallLog(incomingNumber);
//删除后注销观察者
getContentResolver().unregisterContentObserver(this);
super.onChange(selfChange);
}
}
private void deleteCallLog(String incomingNumber) {
ContentResolver resolver = getContentResolver();
Uri uri = Uri.parse("content://call_log/calls");
resolver.delete(uri, "number=?", new String[]{incomingNumber});
}
总结,第二种方法也是迪调用第一种方法进行删除,需添加权限
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />