1

하루 종일 Android 연락처에 사진이있는 연락처를 추가하려고했습니다. 마지막으로 연락처에 그림을 추가하고 있지만 이름이나 전화 번호를 추가 할 수는 없습니다. 연락처가 적절한 사진과 함께 "(알 수 없음)"으로 표시됩니다.ContactsContract 및 ContentProvider를 통해 사진에 새 연락처 추가

내 코드 :

private void addContact2() { 
final String displayName = "XYZA"; 
final String mobileNumber = "666666"; 
final byte[] photoByteArray; // initalized elsewhere 

ArrayList<ContentProviderOperation> ops = new ArrayList<>(); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI) 
     .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "") 
     .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, "") 
     .build()); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValue(ContactsContract.Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayName) 
     //.withValue(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME, displayName) 
     .build()); 

ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI) 
     .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 
     .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE) 
     .withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, photoByteArray) 
     .build()); 

Uri newContactUri = null; 
ContentProviderResult[] res = null; 
try { 
    final ContentResolver contentResolver = getContentResolver(); 
    res = contentResolver.applyBatch(ContactsContract.AUTHORITY, ops); 
    if (res != null && res.length > 0 && res[0] != null) { 
     newContactUri = res[0].uri; 
     Log.d(CallActivity.class.getName(), "URI added contact:"+ newContactUri); 
     Toast.makeText(this, "Successfully added " + displayName, Toast.LENGTH_LONG).show(); 
    } 
    else Log.e(CallActivity.class.getName(), "Contact not added."); 
} catch (NullPointerException | RemoteException | OperationApplicationException e) { 
    Log.e(CallActivity.class.getName(), e.getMessage(), e); 
} 
} 

답변

0

좋아, 내가 그것을 고정했습니다. "name"ops.add에서 .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0) 대신 .withValue(ContactsContract.Data.RAW_CONTACT_ID, 0)을 썼습니다. 이제 모든 것이 잘됩니다.