如何以编程方式从android中删除调用日志?

时间:2012-06-08 10:38:43

标签: android calllog

如何从应用程序中删除/删除通话记录。我这样做

 this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,null,null);

它不起作用。

6 个答案:

答案 0 :(得分:17)

确保您在Manifest.xml中拥有以下权限:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

要删除特定号码的通话记录,请尝试以下方式:

public void DeleteCallLogByNumber(String number) {   
    String queryString = "NUMBER=" + number; 
    this.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);  
}

答案 1 :(得分:9)

现有解决方案不会删除带有0或+前缀的数字。 为了适用于所有电话号码,需要将号码放在单引号中,如下所示:

String queryString = "NUMBER='"+numberToDelete+"'";
context.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);

希望这有帮助。

答案 2 :(得分:5)

接受的答案将删除来自通话记录的特定号码的所有来电。如果要删除唯一的单个调用,可以将CallLogId传递给该函数并运行此查询。

public void DeleteCallById(String idd) {   
    this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " = ? ",
            new String[] { String.valueOf(idd) });
    }  

答案 3 :(得分:4)

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

您只需要授予此权限即可使用此方法:

this.getContentResolver().delete(CallLog.Calls.CONTENT_URI, null, null);

它非常适合我。我在我的Moto-G跑步上测试了它     Kitkat 4.4.2和Samsung Note with Jelly Bean 4.1。

答案 4 :(得分:3)

这是一种改进的方法,例如,如果数据库中存储的数字如下:&#34; 914111222&#34;这种方法可以处理如下数字:&#34; +98 914 111 2222&#34;:

public void removeContactsLogFromPhoneLogs(String numberTag){
    char[] number=numberTag.toCharArray();
    String n="%";
    for(int i=0;i<number.length;i++)
    {
        n=n+(number[i]+"%");
    }
    String queryString=CallLog.Calls.NUMBER+" LIKE '"+n+"'"; 
    mContext.getContentResolver().delete(CallLog.Calls.CONTENT_URI,queryString,null);

}

需要获得以下许可:

<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

答案 5 :(得分:0)

如果要通过特定ID删除多个通话记录,可以使用以下方法:

public void deleteCallLog(List<String> listOfIds){
    getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " in (" + TextUtils.join(",", listOfIds) + ")",
            null);
    callLogAdapter.notifyDataSetChanged();
}