1

アドレス帳に新しい連絡先を追加し、新しい ContactsContract API を使用して一括で適用する方法を教えてください。これに関する適切なチュートリアルが見つかりませんでした。

連絡先を 1 つ追加できます。しかし、バッチ更新は不明な連絡先が追加されて失敗します。

現在、情報を収集しながら while ループをループしています。書き込み、保存ArrayList<ContentProviderOperation>、適用するユーザーの数

ContentProviderResult[] result = getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);

ただし、1 つの連絡先のみが名前で更新され、他の連絡先は不明な連絡先として更新されます。

名前、ニックネーム、モバイル、タイトル、電子メール、Skype ID、勤務国などのフィールドを追加するサンプル コードを手伝ってください。

助けはありますか?ありがとう 。

4

2 に答える 2

1

次のコードは、RawContact エントリを追加してから、名前を追加します。他のフィールドを追加するには、名前を適切な値で追加するために使用される同様のコードを使用します。

    // 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(RawContacts.SYNC1, username);
    operationList.add(builder.build());

    // Name
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, entry.getName().getFullName().getValue() );
    operationList.add(builder.build());

    try {
        mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
    } catch (Exception e) {
        e.printStackTrace();
    }

HTH !

于 2010-04-21T06:56:12.463 に答える
0

これは機能した私のコードです。他の値に必要なフィールドを追加できます。

int backRefIndex = 0

ArrayList<ContentProviderOperation> op_list = new ArrayList<ContentProviderOperation>();
                        
op_list.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null) 
                            .build());      
op_list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI).withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, backRefIndex).withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE).withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "Contact_name").build());

op_list.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID,backRefIndex).withValue(Phone.MIMETYPE,Phone.CONTENT_ITEM_TYPE).withValue(Phone.NUMBER,"1234567890").withValue(Phone.TYPE,Phone.TYPE_MOBILE).withValue(Phone.TYPE, Phone.TYPE_WORK).build());

try {
    ContentProviderResult[] result = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, op_list);
} catch (OperationApplicationException exp) {
    exp.printStackTrace();
} catch (RemoteException exp) {
    exp.printStackTrace();
}
于 2010-04-30T08:56:13.047 に答える