1

好的,伙计们,这是我获取短信的代码:

Cursor cursor = getContentResolver().query(Uri.parse(uri),
                null, CallLog.Calls.DATE + " > " + lastSmsTime, null,
                CallLog.Calls.DATE + " ASC");

类型是:

"content://sms/inbox"
"content://sms/sent"

对于电话:

String[] projection = new String[] { CallLog.Calls.NUMBER,
                CallLog.Calls.TYPE, CallLog.Calls.DURATION, CallLog.Calls.DATE };
Cursor managedCursor = getContentResolver().query(
                CallLog.Calls.CONTENT_URI, projection,
                CallLog.Calls.DATE + " > " + lastCallTime, null,
                CallLog.Calls.DATE + " ASC");

首先,我知道这是未记录的提供程序(如您所见,我使用不同的列常量)。

有趣的是,这在几个 2.3.x 设备上运行良好。但现在我在 Galaxy S II(ICS 4.0.3)上尝试了这个。现在所有短信都在呼叫提供商中重复。

有没有人遇到过这个问题?

UPD 我在这里发现了同样的问题,继续寻找解决方案。

UDD 2 据我所知,三星现在将所有内容都存储在一个日志中,因此我将尝试找到一种方法来对日志应用程序进行逆向工程。

无论如何,仍在寻找将短信和电话分开的解决方案。

4

3 回答 3

1

好的,这可能是解决方案,所以我发布它:三星日志提供程序有很多列,其中是

logtype

据我所知,通话是 100,短信是 300,彩信是 200。

也可以检测制造商:

字符串人 = android.os.Build.MANUFACTURER;

因此,对于三星设备,应该有单独的代码来检查logtype

于 2012-07-03T12:26:24.280 回答
0
Cursor query = this.managedQuery(
        CallLog.Calls.CONTENT_URI, null, CallLog.Calls.TYPE + " in ('3','5') OR " + CallLog.Calls.DURATION + ">0 ", null, null);
//Calls.Type is 3 for Missed Calls and 5 for Cancelled Calls and **Calls.Duration** is 0 for Message, Missed Calls and Cancelled Calls

This code worked fine for me. I had went to 3-4 other links but all of them suggested to delete the Log of Message from CallLog. This is probably the only way to get only Voice Call Logs by not writing/deleting from any log

于 2014-07-16T14:06:10.430 回答
0

我自己一直在看这个。更通用的解决方案是消除所有持续时间为 0 的来电条目。

于 2012-12-02T14:37:40.587 回答