更新三星设备上的呼叫记录后,错误的CallLog分组

时间:2014-09-04 12:32:00

标签: android samsung-mobile calllog

INTRO:

我正在创建一个应用程序,将呼叫重定向到另一个号码,然后按键拨打实际的目标号码。 例如:每次拨打外国号码都可以说" +46 123 4567"它实际上会重定向到本地号码" +1 555 1234"并在2秒后拨打国外号码作为音调。暂停。

通话结束后,我使用CallLog.Calls更新通话记录,以便通话记录显示实际目标号码(不是本地代理)。

一切正常,我的Nexus 5和所有仿真器都按照我希望的方式运行。

问题:

但是在某些三星设备上(特别是4.2.2 Galaxy S2 +(GT-I905P)),会出现问题:

如果我打电话给一个英国联系人,之后我打电话给SE(瑞典),请将这两个联系在三星通话记录中组合在一起。因此,而不是看到两个单独的通话记录:

enter image description here

我只看到

enter image description here

好像我两次打电话给瑞典号码,但那不是真的。很明显,三星仍在使用代理号码对呼叫进行分组,并在分组呼叫时忽略CallLog.Calls。

当我检查CallLog.Calls的输出时,它应该是: (按DATE Ascending排序时,CallLog.Calls的最后两行:

id:25261 name:Test Uk number:00446342845 duration:2 new:1 date:1409833561100

id:25262 name:Test SE number:004629564647 duration:3 new:1 date:1409833582098

我如何更新通话记录:

    // get Log ordered by date, so that the newest is the last entry:
    Cursor cursor = context.getContentResolver()
            .query(CallLog.Calls.CONTENT_URI, null, null, null, CallLog.Calls.DATE);
    cursor.moveToLast();

    // get a field unique value from the cursor so that I know which field to update:
    // (should probably use _ID instead of date)
    long date = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE));

    ContentValues cv = new ContentValues();

    cv.put(CallLog.Calls.NUMBER, destinationNumber); // update the number

    context.getContentResolver().update(CallLog.Calls.CONTENT_URI, cv,
            CallLog.Calls.DATE + " = ?"
           , new String[]{String.valueOf(date)});

所以问题是: 三星如何对这些电话进行分组?我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

  

三星如何对这些电话进行分组?

我认为三星的通话记录显示并非直接来自CallLog,至少部分是这样。没有特别要求呼叫记录仅基于CallLog提供商的内容。

  

我该怎么做才能解决这个问题?

AFAIK,你无能为力。三星的拨号应用程序是三星的,他们可以显示他们想要的任何数据,无论他们想要什么。

答案 1 :(得分:0)

根据同事的建议,我实际上通过删除并插入而不是更新来解决了这个问题。现在,三星拨号器将呼叫分组正确。