public class CallContentObserver extends ContentObserver { private final static String strUriInbox = "content://call_log/calls"; private final static Uri uriCall = Uri.parse(strUriInbox); private String phoneNum; private Context context; public CallContentObserver(Context context, String phoneNum, Handler handler) { super(handler); this.context = context; this.phoneNum = phoneNum; } @Override public void onChange(boolean selfChange) { super.onChange(selfChange); Cursor c = context.getContentResolver().query(uriCall, new String[] { "_id", "number", "date" }, null, null, null); if (c != null && c.moveToFirst()) { String num = c.getString(1); String id = c.getString(0); if (num != null &&phoneNum!=null&& num.equals(phoneNum)) { context.getContentResolver().delete(uriCall, "_id=" + id, null); } // for(int i =0; i < c.getColumnCount(); i++) // { // String strColumnName = c.getColumnName(i); // String strColumnValue = c.getString(i); // Log.e("i", "i="+i); // Log.e("strColumnName", "strColumnName="+strColumnName); // Log.e("strColumnValue", "strColumnValue="+strColumnValue); // } c.close(); } } }
调用
context.getContentResolver() .registerContentObserver( Uri.parse("content://call_log"), true, new CallContentObserver(context, phoneNumber, null));
通过调用ContentObserver,当数据库变化后,才会处理。。此方法可用于如SMS删除,而不用Thread.sleep(不要用Sleep,因为效果非常差,有时无法删除)
短信可用下面的
private final static String strUriInbox = "content://sms/inbox"; private final static Uri uriSms = Uri.parse(strUriInbox);
Cursor c = context.getContentResolver().query( uriSms, new String[] { "_id", "thread_id", "address", "person", "date", "body" }, null, null, null);