2017-12-13 24 views
1

Androidの連絡先リスト内のすべての連絡先に関連付けられている電話番号ごとに生の連絡先を追加しようとしています。特定の連絡先に複数の電話番号が関連付けられている場合、アンドロイドの連絡先リストには同じ連絡先が複数回表示されます。新しく追加された生の連絡先(電話番号に基づいて)を集約し、その連絡先の下に表示したいと思います。私は、私は再びURI ContactsContract.Contacts.CONTENT_URI
の下に使用して、デバイス内のすべての連絡先を一覧表示するために照会何をしたか電話番号に基づいて生の連絡先を追加しているときに連絡先が重複しています

URI

ContactsContract.CommonDataKinds.Phone.CONTENT_URI 
を使用してクエリの上に実行することにより、返された各接点のすべての電話番号を照会しました

次に、連絡先の表示名とその連絡先に関連付けられた電話番号の配列を含む、連絡先ごとにClsContactList class objectsを作成しました。最後に、これらのオブジェクトがリストに追加され、リスト内の各オブジェクトに対して、未加工の連絡先を作成するための添付関数が呼び出されました。

private static void addContact(Account account, ClsContactList ObjContact) { 
    ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); 
    int rawContactInsertIndex = operationList.size(); 
    for (String phoneNumber : ObjContact.PhoneNumbers) { 
     operationList.clear(); 
     //Creating raw contact 
     ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI); 
     builder.withValue(RawContacts.ACCOUNT_NAME, account.name); 
     builder.withValue(RawContacts.ACCOUNT_TYPE, account.type); 
     builder.withValue(ContactsContract.RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DEFAULT); 
     //builder.withValue(RawContacts.SYNC1, ObjContact.getDisplay_name()); 
     operationList.add(builder.build()); 
     //INSERT NAME 
     builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
     builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
     builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); 
     builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, ObjContact.getDisplay_name()); 
     operationList.add(builder.build()); 

     //INSERT MOBILE 
     builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
     builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
     builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); 
     builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phoneNumber); // Number of the person 
     //builder.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE); 
     operationList.add(builder.build()); 

     builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI); 
     builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex); 
     builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.org.c99.SyncProviderDemo.profile"); 
     builder.withValue(ContactsContract.Data.DATA1, "VOIP Call ("+phoneNumber+")"); 
     builder.withValue(ContactsContract.Data.DATA2, "Dialer App"); 
     builder.withYieldAllowed(true); 
     operationList.add(builder.build()); 
     try { 
      mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

添付のスクリーンショットをご覧ください。事前に多くの感謝。あなたは、MIMEタイプを比較することにより、フィルタリングされたデータを取得するには、次のように照会する必要が

連絡先の詳細活性の

生の連絡先のAndroidの連絡先リストで重複

enter image description here

コンタクト

enter image description here

答えて

0

ContactsContract.Data.MIMETYPE = StructuredPostal.CONTENT_ITEM_TYPE

Cursor cursor = cr.query(ContactsContract.Data.CONTENT_URI, 
    null, null, ContacsContract.Data.MIMETYPE + "='" + 
ContactsContract.StructuredPostal.CONTENT_ITEM_TYPE + "'", null); 
+0

ご返信いただきありがとうございます。私の場合、問題は生の連絡先を追加する間に連絡先が重複してしまうことです。添付のスクリーンショットのように、2つの電話番号を持っているので、「Aaaaaa」という名前の連絡先が複製されています。ここでは、「Aaaaaa」に関連付けられた各電話番号の生の連絡先を追加しようとしています。 –

関連する問題