查询call-log时,Samsung设备返回文本消息

时间:2012-09-16 08:22:24

标签: android android-contentprovider samsung-mobile calllog

我的一些用户在其三星设备(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的可能值及其含义提供一些启示吗?

4 个答案:

答案 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.Callslogtype来试探性地解决它,如果抛出异常,我会正常查询,否则,我会选择(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'字段供应商。

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