앱에서 사용자가 연락처를 만들고 저장하도록 허용할 수 있습니다. 이러한 연락처는 일반적으로 두 위치에 저장할 수 있습니다.
- 클라우드 계정: 클라우드 서비스 (예: Google Cloud)와 연결된 계정에 연락처를 저장하여 연락처 동기화 및 백업을 허용합니다.
- 로컬 계정: 연락처를 기기에 로컬로 저장할 수 있습니다.
사용자는 기기 설정에서 원하는 저장소 위치를 설정할 수 있습니다. 이 기본 위치를 기본 계정이라고 하며 연락처를 만들 때 사용됩니다. 앱은 이 환경설정을 준수해야 합니다. 이 문서에서는 클라우드 계정 및 로컬 계정을 비롯한 다양한 연락처 저장소 위치를 사용하는 방법과 사용자 환경설정을 관리하기 위한 권장사항을 구현하는 방법을 설명합니다. 로컬 계정은 기기에 연락처를 직접 저장하는 것을 의미합니다.
기본 계정 검색
새 연락처의 기본 계정을 확인하려면 ContactsContract.RawContacts.DefaultAccount
를 사용합니다.
getDefaultAccountForNewContacts()
를 호출하여 ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
객체를 가져옵니다. 이 객체에는 기본 계정 설정에 관한 정보가 포함됩니다.
Kotlin
import ContactsContrast.RawContacts
import ContactsContrast.RawContacts.DefaultAccount
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
val defaultAccountAndState: DefaultAccountAndState =
DefaultAccount.getDefaultAccountForNewContacts(
getContentResolver()
)
자바
import ContactsContrast.RawContacts;
import ContactsContrast.RawContacts.DefaultAccount;
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState;
DefaultAccountAndState defaultAccountAndState =
DefaultAccount.getDefaultAccountForNewContacts(
getContentResolver()
);
DefaultAccountAndState
객체에는 다음이 포함됩니다.
- 상태: 기본 계정이 설정되어 있는지 여부와 설정된 경우 계정의 카테고리 (클라우드, 로컬, SIM)를 나타냅니다.
- 계정: 상태가
DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM
인 경우 특정 계정 세부정보 (이름 및 유형)를 제공합니다.DEFAULT_ACCOUNT_STATE_LOCAL
를 비롯한 다른 상태에서는 null입니다.
다음은 DefaultAccountAndState
객체를 파싱하는 방법을 보여주는 예입니다.
Kotlin
// Retrieves the state of default account.
val defaultAccountState = defaultAccountAndState.state
var defaultAccountName: String? = null
var defaultAccountType: String? = null
when (defaultAccountState) {
// Default account is set to a cloud or a SIM account.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_CLOUD,
DefaultAccountState.DEFAULT_ACCOUNT_STATE_SIM -> {
defaultAccountName = defaultAccountAndState.account?.name
defaultAccountType = defaultAccountAndState.account?.type
}
// Default account is set to the local account on the device.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_LOCAL -> {
defaultAccountName = RawContacts.getLocalAccountType()
defaultAccountType = RawContacts.getLocalAccountName()
}
// Default account is not set.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_NOT_SET -> {
}
}
자바
// Retrieves the state of default account.
var defaultAccountState = defaultAccountAndState.getState();
String defaultAccountName = null;
String defaultAccountType = null;
switch (defaultAccountState) {
// Default account is set to a cloud or a SIM account.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_CLOUD:
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_SIM:
defaultAccountName = defaultAccountAndState.getAccount().name;
defaultAccountType = defaultAccountAndState.getAccount().type;
break;
// Default account is set to the local account on the device.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_LOCAL:
defaultAccountName = RawContacts.getLocalAccountType();
defaultAccountType = RawContacts.getLocalAccountName();
break;
// Default account is not set.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_NOT_SET:
break;
}
계정을 지정하지 않고 연락처 만들기
기본 계정이 설정된 경우 일반적으로 앱은 연락처를 만들 때 계정을 명시적으로 지정할 필요가 없습니다. 시스템에서 새 연락처를 기본 계정에 자동으로 저장합니다. 계정을 지정하지 않고 연락처를 만드는 방법은 다음과 같습니다.
ContentProviderOperation
객체의 새 ArrayList
를 만듭니다. 이 목록에는 원시 연락처 및 관련 데이터를 삽입하는 작업이 포함됩니다.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
자바
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
새 ContentProviderOperation
를 만들어 원시 연락처를 삽입합니다. 계정을 지정하지 않으므로 ACCOUNT_TYPE
및 ACCOUNT_NAME
를 포함하지 않아도 됩니다.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
ops.add(op.build())
자바
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
);
ops.add(op.build());
연락처 필드 (예: 이름, 전화번호, 이메일)를 포함하도록 작업 목록에 다른 ContentProviderOperation
객체를 추가합니다. 그런 다음 일괄 작업을 실행하여 연락처를 만듭니다.
Kotlin
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
)
} catch (e: Exception) {
// Handle exceptions
}
자바
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
);
} catch (Exception e) {
// Handle exceptions
}
클라우드 계정에서 연락처 만들기
클라우드 계정에서 연락처를 만들려면 원시 연락처 행을 ContactsContract.RawContacts
테이블에 삽입하고 클라우드 계정을 지정합니다. 방법은 다음과 같습니다.
ContentProviderOperation
객체의 새 ArrayList
를 만듭니다.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
자바
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
새 ContentProviderOperation
를 만들어 원시 연락처를 삽입합니다. withValue()
메서드를 사용하여 선택한 클라우드 계정의 계정 유형과 계정 이름을 지정합니다.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
selectedAccount.type
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
selectedAccount.name
)
ops.add(op.build())
자바
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
selectedAccount.getType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
selectedAccount.getName()
);
ops.add(op.build());
연락처 필드를 포함하도록 작업 목록에 다른 ContentProviderOperation
객체를 추가하고 일괄 작업을 실행하여 연락처를 만듭니다.
로컬 계정에서 연락처 만들기
로컬 계정에 연락처를 만들려면 ContactsContract.RawContacts
테이블에 새 원시 연락처 행을 삽입하고 로컬 계정의 계정 정보를 지정합니다.
ContentProviderOperation
객체의 새 ArrayList
를 만듭니다.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
자바
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
새 ContentProviderOperation
를 만들어 원시 연락처를 삽입합니다. ContactsContract.RawContacts.getLocalAccountName()
및 ContactsContract.RawContacts.getLocalAccountType()
를 사용하여 로컬 계정의 계정 정보를 지정합니다.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
ContactsContract.RawContacts.getLocalAccountType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
ContactsContract.RawContacts.getLocalAccountName()
)
ops.add(op.build())
자바
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
ContactsContract.RawContacts.getLocalAccountType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
ContactsContract.RawContacts.getLocalAccountName()
);
ops.add(op.build());
연락처 필드를 포함하도록 작업 목록에 다른 ContentProviderOperation
객체를 추가하고 일괄 작업을 실행하여 연락처를 만듭니다.