Kişi depolama alanlarını yönetme

Uygulamalar, kullanıcıların kişi oluşturmasına ve saklamasına izin verebilir. Bu kişiler genellikle iki konuma kaydedilebilir:

  1. Cloud hesabı: Kişilerin senkronize edilmesine ve yedeklenmesine izin vermek için kişileri bir bulut hizmetiyle (ör. Google Cloud) ilişkili bir hesaba kaydedin.
  2. Yerel hesap: Kişiler cihazda yerel olarak depolanabilir.

Kullanıcılar, cihaz ayarlarından tercih ettikleri depolama alanını ayarlayabilir. Tercih edilen bu konum, varsayılan hesap olarak bilinir ve kişi oluştururken kullanılır. Uygulamalar bu tercihe uymalıdır. Bu belgede, bulut hesapları ve yerel hesaplar dahil olmak üzere farklı kişi depolama konumlarıyla nasıl çalışacağınız ve kullanıcı tercihlerini yönetmeyle ilgili en iyi uygulamaları nasıl uygulayacağınız açıklanmaktadır. Yerel hesap, kişilerin doğrudan cihazda depolanmasını ifade eder.

Varsayılan hesabı alma

Yeni kişiler için varsayılan hesabı belirlemek üzere ContactsContract.RawContacts.DefaultAccount simgesini kullanın.

Nesneyi almak için getDefaultAccountForNewContacts()'u çağırın. ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState Bu nesne, varsayılan hesap ayarı hakkında bilgi içerir.

Kotlin

import ContactsContrast.RawContacts
import ContactsContrast.RawContacts.DefaultAccount
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState

val defaultAccountAndState: DefaultAccountAndState =
  DefaultAccount.getDefaultAccountForNewContacts(
      getContentResolver()
  )

Java

import ContactsContrast.RawContacts;
import ContactsContrast.RawContacts.DefaultAccount;
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState;

DefaultAccountAndState defaultAccountAndState =
  DefaultAccount.getDefaultAccountForNewContacts(
    getContentResolver()
  );

DefaultAccountAndState nesnesi şunları içerir:

  • Durum: Varsayılan bir hesabın ayarlanıp ayarlanmadığını ve ayarlanmışsa bu hesabın kategorisini (bulut, yerel veya SIM) belirtir.
  • Hesap: Durum DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM ise belirli hesap ayrıntılarını (ad ve tür) sağlar. DEFAULT_ACCOUNT_STATE_LOCAL dahil diğer eyaletler için null olur.

DefaultAccountAndState nesnesinin nasıl ayrıştırılacağına dair bir örnek aşağıda verilmiştir:

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 -> {
    }
}

Java

// 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;
}

Hesap belirtmeden kişi oluşturma

Varsayılan hesap ayarlandıysa uygulamanızın, kişi oluştururken genellikle açıkça bir hesap belirtmesi gerekmez. Sistem, yeni kişiyi varsayılan hesaba otomatik olarak kaydeder. Hesap belirtmeden nasıl kişi oluşturacağınız aşağıda açıklanmıştır.

ContentProviderOperation nesnesi içeren yeni bir ArrayList oluşturun. Bu liste, ham kişiyi ve ilişkili verilerini ekleme işlemlerini içerir.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

Ham kişiyi eklemek için yeni bir ContentProviderOperation oluşturun. Hesap belirtmediğiniz için ACCOUNT_TYPE ve ACCOUNT_NAME öğelerini eklemeniz gerekmez.

Kotlin

val op = ContentProviderOperation.newInsert(
    ContactsContract.RawContacts.CONTENT_URI
)
ops.add(op.build())

Java

ContentProviderOperation.Builder op =
    ContentProviderOperation.newInsert(
        ContactsContract.RawContacts.CONTENT_URI
    );
ops.add(op.build());

İletişim alanlarını (ad, telefon numarası, e-posta gibi) dahil etmek için işlem listesine başka ContentProviderOperation nesneleri ekleyin. Ardından, kişiyi oluşturmak için toplu işlemi yürütün.

Kotlin

try {
    getContentResolver().applyBatch(
        ContactsContract.AUTHORITY, ops
    )
} catch (e: Exception) {
    // Handle exceptions
}

Java

try {
    getContentResolver().applyBatch(
        ContactsContract.AUTHORITY, ops
    );
} catch (Exception e) {
    // Handle exceptions
}

Bulut hesabında kişi oluşturma

Bir bulut hesabında kişi oluşturmak için ham kişi satırını ContactsContract.RawContacts tablosuna ekleyin ve bulut hesabını belirtin. Bunun için:

ContentProviderOperation nesnesi içeren yeni bir ArrayList oluşturun.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

Ham kişiyi eklemek için yeni bir ContentProviderOperation oluşturun. Seçilen bulut hesabının hesap türünü ve hesap adını belirtmek için withValue() yöntemini kullanın.

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())

Java

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());

Kişi alanlarını dahil etmek için işlem listesine başka ContentProviderOperation nesneleri ekleyin ve kişiyi oluşturmak için toplu işlemi yürütün.

Yerel hesapta kişi oluşturma

Yerel hesapta kişi oluşturmak için ContactsContract.RawContacts tablosuna yeni bir ham kişi satırı ekleyin ve yerel hesabın hesap bilgilerini belirtin:

ContentProviderOperation nesnesi içeren yeni bir ArrayList oluşturun.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

Ham kişiyi eklemek için yeni bir ContentProviderOperation oluşturun. Yerel hesap için hesap bilgilerini belirtmek üzere ContactsContract.RawContacts.getLocalAccountName() ve ContactsContract.RawContacts.getLocalAccountType() öğelerini kullanın.

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())

Java

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());

Kişi alanlarını dahil etmek için işlem listesine başka ContentProviderOperation nesneleri ekleyin ve kişiyi oluşturmak için toplu işlemleri yürütün.