如何从应用程序中删除/删除通话记录。我这样做
this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,null,null);
它不起作用。
答案 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();
}