如何以编程方式从安卓手机中删除通话记录?

12

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

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

它不起作用。


请确保在清单文件中添加以下权限:<uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.WRITE_CONTACTS" /> - ρяσѕρєя K
你遇到了哪个错误?请发布你的日志记录。 - Dipak Keshariya
@imrankhan,它能工作,但我想从通话记录中删除特定的号码。 - sai
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);  
}

10
你是不是指 <uses-permission android:name="android.permission.READ_CALL_LOG" /> <uses-permission android:name="android.permission.WRITE_CALL_LOG" />? :) - keybee

12
现有解决方案无法删除以0或+为前缀的数字。 为使其适用于所有电话号码,需要将电话号码放在单引号中,如下所示:

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

String queryString = "NUMBER='"+numberToDelete+"'";
context.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);
希望这能有所帮助。

10

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

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

谢谢。您的回答非常有帮助,简单明了,并且深入探讨了这个主题。 - JamisonMan111
如何获取最后一通电话的通话记录ID? - GOLDEE

5
<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,运行的是Jelly Bean 4.1。


2
这也适用于Marshmallow。我只是添加了这个评论,以防有人偶然看到这个答案。 - Draško

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);

}

需要以下权限才能进行IT技术操作:

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

使用此方法将删除其他号码……并非所有号码都是914111222,有些可能是*2080或911。这将删除包含2080的每个号码。 - CmTiger

0
如果您想通过特定的ID删除多个通话记录,可以使用以下方法:
public void deleteCallLog(List<String> listOfIds){
    getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " in (" + TextUtils.join(",", listOfIds) + ")",
            null);
    callLogAdapter.notifyDataSetChanged();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接