我的一些用户在其三星设备(GT-N7000和SGH-I777)上报告我在我的应用中为CallLog.Calls显示的查询也会显示短信。
我已经创建了CallLog
ContentProvider
的转储,它似乎有Android API中未提及的额外字段,并且未在我们的任何测试设备上返回。
具体来说,通过转储查看,有一个名为logtype
的字段,对于呼叫而言似乎等于100,对于文本消息则为300。
在网上搜索这个字段后,我没有找到任何关于该字段值的官方文档,但是我在这个字段中遇到了许多其他可能的值,主要是通过崩溃堆栈跟踪,它显示ContentProvider
的下划线查询:
logtype = 300 OR logtype = 200
logtype = 100 OR logtype = 500 OR logtype = 800 OR logtype = 900 OR 日志类型= 1000
所以我假设300/200用于短信,而100/500/800/900/1000用于通话,但我不确定,因为我还没有看到500/800/900 /报告用户的设备上使用了1000个。
有人可以为logtype的可能值及其含义提供一些启示吗?
答案 0 :(得分: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
}
}
cursor.close();
答案 1 :(得分:1)
我设法通过查询CallLog.Calls
列logtype
来试探性地解决它,如果抛出异常,我会正常查询,否则,我会选择(logtype=100 OR logtype=500)
<查询/ p>
这似乎对我的报告用户有效,但我仍然不确定它是否涵盖所有基础,因为logtype
有许多可能的值,我不知道其含义。
如果有人有更好的答案,请添加。
答案 2 :(得分: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
答案 3 :(得分:0)
到目前为止,我们发现三星设备使用值 1150 , 100 或 1000 作为Calls内容中的'logtype'字段供应商。
我无法确认是否使用了此处提及的任何其他值。