4

我的一些用户报告说,在他们的三星设备(GT-N7000 和 SGH-I777)上,我在我的应用程序中对CallLog.Calls进行的查询也会显示文本消息。

我已经创建了他们的转储CallLog ContentProvider,它似乎有 Android API 中没有提到的额外字段,并且没有在我们的任何测试设备上返回。

具体来说,查看转储,有一个名为 的字段logtype,它似乎等于 100 用于通话,300 用于短信。在线搜索该字段后,我没有找到该字段值的任何官方文档,但我主要通过崩溃堆栈跟踪发现了该字段的许多其他可能值,这些跟踪显示了以下划线查询ContentProvider

日志类型=300 或日志类型=200

日志类型 = 100 或日志类型 = 500 或日志类型 = 800 或日志类型 = 900 或日志类型 = 1000

所以我假设300/200用于短信,100/500/800/900/1000用于通话,但我不确定,因为我没有看到500/800/900/1000被使用在报告用户的设备上。

有人可以阐明 logtype 的可能值及其含义吗?

4

4 回答 4

2

您好,如果您检查 callLog.Calls 列,您会发现 messageid 字段,该字段表示这是三星手机的消息。因此,如果您只想获取没有消息的呼叫列表,只需执行以下操作:

int messageIdIndex=cursor.getColumnIndex("messageid");

while (cursor.moveToNext()) {

if(messageIdIndex>=0)
    messageID=cursor.getLong(messageIdIndex);

if(messageID<=0)
{
    //do whatever you need with calls log data
}

}

光标.close();

于 2013-05-27T12:07:50.073 回答
1

我已经设法通过查询CallLog.Calls列来初步解决它logtype,如果抛出异常,我会正常查询,否则,我会选择查询(logtype=100 OR logtype=500)

这似乎适用于我的报告用户,但我仍然不确定它是否涵盖所有基础,因为有许多可能的值logtype我不知道其含义。

如果有人有更好的答案,请添加。

于 2012-09-23T08:51:32.550 回答
0

当我调试 sgs2 设备时,我发现了这个。可能对某人有用。

SELECT number, name, type, date, duration FROM logs WHERE (
logs.logtype=100 OR 
logs.logtype=110 OR 
logs.logtype=900 OR 
logs.logtype=500 OR 
logs.logtype=800 OR 
logs.logtype=120 OR 
logs.logtype=510 OR 
logs.logtype=1000 OR 
(logs.logtype=200 AND number NOT IN (SELECT number FROM logs WHERE number LIKE '%@%')) OR logs.logtype=300) 
AND ((type != 4)) AND (logtype=100 OR logtype=500))) 
ORDER BY date DESC
于 2013-11-23T12:38:14.367 回答
0

到目前为止,我们发现三星设备在 Calls 内容提供程序中的 'logtype' 字段中使用了值11501001000

我无法确认是否使用了此处提到的任何其他值。

于 2018-04-27T19:08:58.783 回答