练手小项目(4)安全卫士——黑名单拦截 利用内容提供者删除通话记录

 上一节,我们讲了 删除通话记录,但是有一个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();//另外一个进程里面运行的 远程服务的方法。 方法调用后,呼叫记录可能还没有生成。

也就是上一节写的挂断电话 方法

你可能感兴趣的:(android,安全卫士)