2013-04-29 36 views
1

我取使用下面的查詢所有的聯絡小組:重複的條目時聯繫人組的Android 4+

//get list of contact groups from ContactsContract 
    Cursor groups_cursor = getContentResolver()// 
      .query(ContactsContract.Groups.CONTENT_SUMMARY_URI,// 
        new String[] { // 
        ContactsContract.Groups._ID,// 
          ContactsContract.Groups.TITLE, // 
          ContactsContract.Groups.DATA_SET,// 
          ContactsContract.Groups.GROUP_VISIBLE,// 
          ContactsContract.Groups.DELETED,// 
          ContactsContract.Groups.SYSTEM_ID,// 
          ContactsContract.Groups.SUMMARY_COUNT, // 
          ContactsContract.Groups.SUMMARY_WITH_PHONES // 
        },// 
        null, null, null);// 

我的光標總是包含組「家庭」,「朋友」和「同事」的兩倍。

爲什麼我會得到這些重複?

我有一個Google帳戶同步。

組在聯繫人應用中正確列出。

回答

0

我有過類似的問題。在我的設備,我注意到:

  • 每對重複的組,一組總是包含0觸點(ContactsContract.Groups.SUMMARY_COUNT)和
  • 與> 0聯繫人的所有聯繫人組有一個非空ContactsContract.Groups.NOTES列。

它仍然不是很清楚,我爲什麼返回空的羣體,但我已經通過選擇非空的團體,或有非空列票據圍繞它得到。

希望這會有所幫助!

+0

謝謝,我會試試 – Mirko 2013-07-18 10:57:07

+0

沒問題。祝你好運! – Keith 2013-07-18 11:07:16

1

我發現所有這些空的重複組都具有ACCOUNT_TYPE =「DeviceOnly」,而合法組具有ACCOUNT_TYPE =「com.google」。所以如果你把它作爲一個參數,你應該很好!

這是我的選擇語句添加

private static final String CONTACT_GROUP_SELECTION = ContactsContract.Groups.AUTO_ADD + " = 0 " 
     + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'com.google' " 
     + " AND " + ContactsContract.Groups.ACCOUNT_NAME + " NOT NULL " 
     + " AND " + ContactsContract.Groups.FAVORITES + " = 0 " 
     + " AND " + ContactsContract.Groups.DELETED + " = 0 "; 

的其他條款,因爲internal Android library使用它們,似乎是個好主意。但是,我添加「com.google」條款之前,重複組的問題並未消失。

0

這是一個老問題,但因爲還是有沒有正確的答案在這裏的地雷:

  • 組可以刪除
  • 組可以是無形的(用於內部使用)
  • 組可以有不同的來源(手機通訊錄,不同的同步適配器= Google帳戶或其他帳戶一般)

前兩個可以很容易地使用:

ContactsContract.Groups.DELETED + " = 0 AND " + 
ContactsContract.Groups.GROUP_VISIBLE + " = 1"; 

根本不應該過濾起源。我在我的設備上使用了多個Google帳戶,並最終擁有多個「已加入Star Android系統」和「我的聯繫人」組,這些組由Google同步適配器爲不同帳戶同步。 最好的解決方案可能是合併具有相同名稱的組。用戶通常不關心聯繫人/組同步來自哪個帳戶。

0

我面臨同樣的問題(在LG G4上的Android 5.1上),所有的答案都是錯誤的。

GROUP_VISIBLE = '1'不會返回在「聯繫人」應用程序中可見的所有組。

NOTES也沒有給出任何可靠的信息,因爲所有的組都有一些註釋。

ACCOUNT_TYPE - 也是假的,因爲我加入我的團隊,並出現兩次 - 一個與com.google類型,而另一個與lg.sync但一些com.google組是非空的,有些lg.sync組也沒有空。

看起來只有可靠的查詢聯繫人組的方式是選擇非空組。如果你的要求是顯示空組,除了兩者都顯示外,你不能做任何事情。

Intertingly,在MotoG 1st gen Android 5.1上一切似乎都正常,沒有重複的組。只有GROUP_VISIBLE工程不好,因爲它根本不顯示自定義組。

相關問題