好的,大家好,我的代码是获取短信:
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)上尝试了这个。现在所有SMS 都在呼叫提供商中重复。
有没有人遇到过这个问题?
UPD 我找到了同样的问题here,继续寻找解决方案。
UDD 2 从我现在所知,三星现在将所有内容存储在一个日志中,因此我将尝试找到一种方法来对日志应用程序进行逆向工程。
无论如何,仍在寻找单独的短信和电话的解决方案。
答案 0 :(得分:1)
好的,这可能是解决方案,所以我发布了它: 三星日志提供商有很多专栏,其中有
logtype
据我所知,电话为100,短信为300,彩信为200.
也可以检测制造商:
String man = android.os.Build.MANUFACTURER;
因此,对于三星设备,应该有单独的代码来检查 logtype 。
答案 1 :(得分:0)
我自己一直在看这个。更通用的解决方案是消除持续时间为0的所有来电条目。
答案 2 :(得分: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
这段代码对我来说很好。我已经去了3-4个其他链接,但他们都建议从CallLog删除消息日志。这可能是通过不从任何日志写入/删除来获取语音呼叫日志的唯一方法