0

電話から連絡先グループを取得する方法に関する優れたコードを見つけました。

final String[] GROUP_PROJECTION = new String[] {ContactsContract.Groups._ID, ContactsContract.Groups.TITLE };
Cursor cursor = getContentResolver().query(ContactsContract.Groups.CONTENT_URI, GROUP_PROJECTION, null,  null, ContactsContract.Groups.TITLE);
      while (cursor.moveToNext()) {

          String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Groups._ID));
          String gTitle = (cursor.getString(cursor.getColumnIndex(ContactsContract.Groups.TITLE)));

          if (gTitle.contains("Group:")) {
            gTitle = gTitle.substring(gTitle.indexOf("Group:") + 6).trim();
          }
          if (gTitle.contains("Favorite_")) {
               gTitle = "Favorites";
          }
          if (gTitle.contains("Starred in Android") || gTitle.contains("My Contacts")) {
              continue;
          }
          arr_groups.add(gTitle);
          arr_groupswithid.add(id + "." + gTitle);
}    

結果は次のとおりです。

ここに画像の説明を入力

異なる ID を持つ同じグループを取得する理由がわかりません。Abhishek が示唆したように、SIM や電話に保存されている連絡先、または Facebook や Gmail から同期されている連絡先と関係があるのか​​もしれません。

これを無視して、特定のグループに属する連絡先を取得しようとしましたが、正しい番号を取得できません。

String groupId = "10";
String where = ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + "="
               + groupId + " AND "
               + ContactsContract.CommonDataKinds.GroupMembership.MIMETYPE + "='"
               + ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'";

Cursor c = getContentResolver().query(
               ContactsContract.Data.CONTENT_URI,
               new String[] {
                       ContactsContract.CommonDataKinds.GroupMembership.RAW_CONTACT_ID,
                       ContactsContract.Data.DISPLAY_NAME
               }, where, null, ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

Log.i("cursorc", c.getCount() + "");

groupId==10 の場合、7 件の連絡先を取得します。==12 の場合、11 を取得します。==5 の場合、0 を取得します。Coworkers グループに 18 人いるので、全体として 18 です。下の画像を参照してください。

groupId==3 の場合、連絡先は 0 件です。==9 なら 2 です。==13 なら 0 です。全部で 2 です。これでいいのです。

groupId==1 の場合、連絡先は 0 件です。私のお気に入りは一体どこにあるの?? それは私に2を与えるはずです。

groupId==6 の場合、連絡先は 0 件です。私の頻繁な連絡先はどこですか?? それは私に17を与えるはずです。

これらは私の電話の私のグループです:

ここに画像の説明を入力

私は今何をすべきかわかりません。

4

1 に答える 1

2

あなたのグループ ACCOUNT_TYPE は異なるので、異なるIDと異なるカウントを持つ同じ名前を取得するので、選択したタイプのグループを取得するタイプを決定する必要があります。たとえば、選択を次のように変更できます

final String GROUP_SELECTION = ContactsContract.Groups.AUTO_ADD + " = 0 "
                + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'com.google' "
//              + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'DeviceOnly' "
//              + " AND " + ContactsContract.Groups.ACCOUNT_TYPE + " = 'vnd.sec.contact.phone' "
                + " AND " + ContactsContract.Groups.SUMMARY_WITH_PHONES + " > 0 "
                + " AND " + ContactsContract.Groups.ACCOUNT_NAME + " NOT NULL  "
                + " AND " + ContactsContract.Groups.FAVORITES + " = 0 "
                + " AND " + ContactsContract.Groups.DELETED + " = 0  ";

これは、ACCOUNT_TYPE として com.google を持つグループのみを表示します

于 2016-01-20T11:46:25.613 に答える