Android/Java
안드로이드 주소록으로 내보내기
easy-1
2021. 6. 10. 16:38
<개요>
앱에서 원하는 연락처 정보를 내 디바이스 주소록으로 내보내기
<적용 방법>
1. 주소록 접근권한을 허용
AndroidManifest.xml 에 주소록 접근 권한 추가 (쓰기 권한 필요)
<uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 주소록 읽기 -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- 주소록 쓰기 -->
2. ContentProviderOperation.newInsert 를 사용하여 리스트에 내보낼 데이터를 추가시킴
3. 리스트에 담긴 데이터를 applyBatch 시점에 ArrayList 형태로 넘겨줌
ArrayList<ContentProviderOperation> list = new ArrayList<>();
/**
* 주소록으로 내보내는 정보
*/
try {
list.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
// 이름
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, "name") // 저장할 이름
.build());
// 휴대폰 번호
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "mobileNumber") // 휴대폰번호
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE) // 번호타입(Type_Mobile : 모바일)
.build());
// 회사 전화번호
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "companyNumber") // 전화번호
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK) // 번호타입(TYPE_WORK : 직장)
.build());
// 이메일
list.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Email.DATA, "email@example.com") // 이메일
.build());
// 사진
if (cachedImage != null) { // cachedImage : Bitmap
ByteArrayOutputStream out = new ByteArrayOutputStream();
cachedImage.compress(Bitmap.CompressFormat.JPEG, 100, out);
byte[] byteArray = out.toByteArray();
list.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.DATA15, byteArray)
.build());
}
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, list);
list.clear(); // 리스트 초기화
} catch (RemoteException e) {
Dlog.d("RemoteException :: " + e);
} catch (OperationApplicationException e) {
Dlog.d("OperationApplicationException :: " + e);
} catch (Exception e) {
Dlog.d("Exception :: " + e);
}