如何从应用程序中删除/删除通话记录。我正在这样做
this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,null,null);
它不工作。
确保您具有以下权限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);
}
现有的解决方案不会删除带有 0 或 + 前缀的数字。为此,它适用于所有电话号码,需要将号码放在单引号中,如下所示:
String queryString = "NUMBER='"+numberToDelete+"'";
context.getContentResolver().delete(CallLog.Calls.CONTENT_URI, queryString, null);
希望这可以帮助。
接受的答案将从通话记录中删除特定号码的所有通话。如果您只想删除一个调用,您可以通过将 CallLogId 传递给该函数并运行此查询来实现。
public void DeleteCallById(String idd) {
this.getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " = ? ",
new String[] { String.valueOf(idd) });
}
<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 上对其进行了测试。
这是一种改进的方法,例如如果数据库中存储的数字是:“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"/>
如果您想按特定 ID 删除多个通话记录,可以使用以下方法:
public void deleteCallLog(List<String> listOfIds){
getContentResolver().delete(CallLog.Calls.CONTENT_URI,CallLog.Calls._ID + " in (" + TextUtils.join(",", listOfIds) + ")",
null);
callLogAdapter.notifyDataSetChanged();
}