12

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

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

它不工作。

4

6 回答 6

19

确保您具有以下权限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);  
}
于 2012-06-08T11:20:17.293 回答
12

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

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

希望这可以帮助。

于 2012-12-26T10:14:04.370 回答
9

接受的答案将从通话记录中删除特定号码的所有通话。如果您只想删除一个调用,您可以通过将 CallLogId 传递给该函数并运行此查询来实现。

public void DeleteCallById(String idd) {   
    this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " = ? ",
            new String[] { String.valueOf(idd) });
    }  
于 2014-08-12T12:42:17.727 回答
5
<uses-permission android:name="android.permission.WRITE_CALL_LOG"/>

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

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

它对我来说完美无缺。我已经在运行 Kitkat 4.4.2 的 Moto-G 和带有 Jelly Bean 4.1 的 Samsung Note 上对其进行了测试。

于 2014-06-18T13:20:36.540 回答
3

这是一种改进的方法,例如如果数据库中存储的数字是:“914111222”,这个方法可以处理像:“+98 914 111 2222”这样的数字:

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"/>
于 2015-06-12T08:27:17.150 回答
0

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

public void deleteCallLog(List<String> listOfIds){
    getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " in (" + TextUtils.join(",", listOfIds) + ")",
            null);
    callLogAdapter.notifyDataSetChanged();
}
于 2020-09-27T10:06:34.817 回答