上一节,我们讲了 删除通话记录,但是有一个bug 就是 会先出现在通话记录里面,一闪 ,然后就会消失,这对用户体验不好,所以我们要用内容提供者 观察通话记录的变化。
①先得到一个内容管理者
getContentResolver().registerContentObserver(uri, true, new CallLogObserver( incomingNumber,new Handler()));
②然后给他一个Url 其实可以通过 系统提供的 calllog找到赋值 我直接给url 了
Uri uri = Uri.parse("content://call_log/calls");
你也可以写 CallLog.Calls.Content_url 不过就不是这么写的了 图方便我还是直接写url了
③然后定义一个观察者进行操作
private class CallLogObserver extends ContentObserver{
private String incomingNumber;
public CallLogObserver(String incomingNumber,Handler handler) {
super(handler);
this.incomingNumber = incomingNumber;
}
@Override
public void onChange(boolean selfChange) {
Log.i(TAG,"数据库的内容变化了,产生了呼叫记录");
getContentResolver().unregisterContentObserver(this);
deleteCallLog(incomingNumber);
super.onChange(selfChange);
}
}
然后挂断电话即可
endCall();//另外一个进程里面运行的 远程服务的方法。 方法调用后,呼叫记录可能还没有生成。
也就是上一节写的挂断电话 方法