2012-09-16 86 views
3

我的一些用戶報告說,在他們的三星設備(GT-N7000 & SGH-I777)上,我在我的應用CallLog.Calls的應用程序中發出的查詢也顯示短信。三星設備在查詢通話記錄時返回短信

我已經創造了CallLogContentProvider的轉儲,而且似乎有Android的API中沒有提及,而且在任何我們的測試設備不返回額外的字段。

具體而言,通過轉儲查看,有一個名爲logtype的字段,其對於電話來說似乎等於100,對於文本消息來說等於100。 具有該領域的在線搜索,我沒有找到該字段的值的任何正式文件,但我碰到很多這個領域的其他可能的值來主要是通過碰撞堆棧跟蹤,其中由ContentProvider顯示下劃線查詢:

logtype=300 OR logtype=200

logtype=100 OR logtype=500 OR logtype=800 OR logtype=900 OR logtype=1000

所以我假設300/200用於短信,而100/500/800/900/1000用於通話,但我不確定,因爲我沒有看到500/800/900/1000正在報告用戶的設備上使用。

有人可以爲logtype的可能值和它們的含義闡明一些情況嗎?

回答

1

我已經成功通過查詢CallLog.Calls的列logtype,如果拋出一個異常,暫且解決這個問題,我通常查詢,否則,我的(logtype=100 OR logtype=500)

這似乎是工作爲我的報告選擇查詢用戶,但我仍然不確定它是否涵蓋所有基礎,因爲logtype有許多可能的值,我不知道其含義。

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

+0

你可以指定100是什麼日誌類型= VS日誌類型= 500?我在這個問題上與三星進行了一次對話。無法訪問設備令人非常沮喪。 – ThumbsDP

+0

嗨,我其實不知道,我在當時搜索了字段名'logtype',並發現一些來自設備的崩潰日誌,提示100和500上的股票調用日誌過濾器:android.database.sqlite .SQLiteException: near「)」:語法錯誤:,編譯時: SELECT _id,name,number,type FROM logs WHERE(logtype = 100 OR logtype = 500)AND(_ID =) 所以我將它添加到我的查詢用手指劃過......迄今爲止很好。完全與你在沮喪的感覺 – marmor

2

你好如果你會檢查callLog.Calls列,你會發現messageid字段,它表示這是三星手機的消息。 所以,如果你只是想獲得沒有消息的通話清單,只需做:

int messageIdIndex = cursor.getColumnIndex(「messageid」);

而(cursor.moveToNext()){

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

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

}

cursor.close();

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