之前试过使用删除最近一条通话记录,发现会把手机里面的记录也给删除,不知道是代码写的有问题仍是别的缘由:get
ContentResolver resolver = context.getContentResolver();
Cursor cursor = resolver.query(CallLog.Calls.CONTENT_URI,
new String[] { "_id" }, null, null, "_id desc limit 1");
if (cursor.moveToFirst()) {
int id = cursor.getInt(0);
resolver.delete(CallLog.Calls.CONTENT_URI, " _id = ? ",
new String[] { id + "" });
return true;
}it
发如今使用广播监听的时候io
phone_state.equals(TelephonyManager.EXTRA_STATE_IDLE)会执行两次im
致使打点都没有通话记录。static
最后换了一种不是很好的解决办法:时间
结束电话的时候去扫描通话记录,将其中的电话号码的长度小于3的记录删除query
实现代码:while
读取全部的通话记录(其实能够给定一个时间限制,那样会好一点)
co
ContentResolver resolver = context.getContentResolver();
Cursor cursor = context.getContentResolver().query(CallLog.Calls.CONTENT_URI,
null, null, null, null);
if(cursor.moveToFirst()){
do{
String number = cursor.getString(cursor.getColumnIndex(Calls.NUMBER));
System.out.println("电话号码:"+number);
if(number.length()<3){
deleteCallLogByNumber(context, number);
return true;
}
//删除私人电话的通话记录
}while(cursor.moveToNext());
}
删除指定号码的通话记录:let
public static boolean deleteCallLogByNumber(Context context, String phonenumber) { boolean ret = false; ContentResolver cr = context.getContentResolver(); try { if (phonenumber != null && phonenumber.length() > 0) { int i = cr.delete(CallLog.Calls.CONTENT_URI, "number=?", new String[] { phonenumber }); Log.d("xx", "i:" + i); if (i > 0) { ret = true; } } } catch (Exception e) { e.printStackTrace(); } return ret; }