短信被复制为电话(三星galaxy S II)

时间:2012-07-02 13:21:03

标签: android android-contentprovider samsung-mobile

好的,大家好,我的代码是获取短信:

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 从我现在所知,三星现在将所有内容存储在一个日志中,因此我将尝试找到一种方法来对日志应用程序进行逆向工程。

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

3 个答案:

答案 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删除消息日志。这可能是通过不从任何日志写入/删除来获取语音呼叫日志的唯一方法