我正在尝试通过我的应用程序从设备中删除所有短信,但由于某些原因,短信日志仍然出现在某些三星设备的通话记录中。
我尝试了一种更“激进”的方法,并使用ContentResolver
删除了以下URI:
content://call_log/calls
content://sms
content://sms/inbox
content://sms/sent
content://mms/inbox
content://mms
content://mms-sms
content://mms/address
content://mms/part
content://mms/sent
content://mms/outbox
使用以下简单代码完成删除:
ContentResolver cr = mContext.getContentResolver() ;
cr.delete(uri, null, null) ;
结果是所有文本消息都从设备中删除,呼叫日志从呼叫中清除,但仍然包含SMS日志(对于不存在的SMS消息)。
上述所有表格在流程结束时确实为空,但我找不到呼叫记录从中提取SMS数据的相关来源。
我在这个主题上找到了以下帖子,但仍然没有可行的解决方案:
我会提前说明我知道CallLog.Calls.CONTENT_URI
处的“logtype”列。由于此表现在为空,而且数据不是来自那里,因此不相关。
答案 0 :(得分:1)
结果是所有文本消息都从设备中删除,呼叫日志从呼叫中清除,但仍然包含SMS日志(对于不存在的SMS消息)。
你的“仍然包含短信日志”的指示究竟是什么?什么包含短信日志?
我假设您参考三星电话应用程序。如果是这样 - 不幸的是,正如@CommonsWare所说,这款手机调用应用程序并不一定在相关的ContentProvider
后面显示正确的数据库状态。
这可能是这个应用程序缓存(持久性/非持久性)数据,并且当“真实数据”(来自内容提供商数据库)发生变化时不会刷新它...谁知道......可能只有当它的进程重启时,并且缓存会清除 - 它会刷新自己......
答案 1 :(得分:1)
找到答案 -
为了访问三星通话记录,我们需要向清单添加几个权限:
<uses-permission android:name="com.sec.android.provider.logsprovider.permission.READ_LOGS" />
<uses-permission android:name="com.sec.android.provider.logsprovider.permission.WRITE_LOGS" />
现在,我们所要做的就是使用内容解析器从content:// logs / historys中删除日志类型400,410,700,200,300,600和500,如下所示:
mContext = getActivity(); // Assuming that you are doing this from within a Fragment
try
{
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='400'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='410'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='700'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='200'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='300'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='600'", null);
mContext.getContentResolver().delete(Uri.parse("content://logs/historys"), "logtype='500'", null);
}
catch(Exception exception)
{
exception.printStackTrace();
}
对我来说就像一个魅力。
答案 2 :(得分:0)
三星为消息日志使用单独的存储空间。然而,他们创建了一个特殊的ContentProvider来访问它们。
来源我还没找到,但找到了URI:content://logs/historys
。
删除指定号码的日志的示例:
try{
context.getContentResolver().delete(Uri.parse("content://logs/historys"), CallLog.Calls.NUMBER + " like '%" + number + "'", null);
} catch (IllegalArgumentException e){
//that mean this not samsung device
}