ניהול המיקומים לאחסון אנשי הקשר

יכול להיות שאפליקציות יאפשרו למשתמשים ליצור ולאחסן אנשי קשר. בדרך כלל אפשר לשמור את אנשי הקשר האלה בשני מקומות:

  1. חשבון בענן: שמירת אנשי קשר בחשבון שמשויך לשירות ענן (כמו Google Cloud) כדי לאפשר סנכרון וגיבוי של אנשי הקשר.
  2. חשבון מקומי: אפשר לאחסן את אנשי הקשר באופן מקומי במכשיר.

המשתמשים יכולים להגדיר את מיקום האחסון המועדף בהגדרות המכשיר. המיקום המועדף הזה נקרא חשבון ברירת המחדל, והוא משמש ליצירת אנשי קשר. האפליקציות צריכות להתחשב בהעדפה הזו. במאמר הזה מוסבר איך לעבוד עם מיקומים שונים לאחסון אנשי קשר, כולל חשבונות בענן וחשבונות מקומיים, ואיך ליישם שיטות מומלצות לניהול העדפות משתמשים. החשבון המקומי מתייחס לאחסון אנשי קשר ישירות במכשיר.

אחזור של חשבון ברירת המחדל

כדי לקבוע את חשבון ברירת המחדל לאנשי קשר חדשים, משתמשים ב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()
  )

Java

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. הערך יהיה null במדינות אחרות, כולל DEFAULT_ACCOUNT_STATE_LOCAL.

דוגמה לאופן ניתוח האובייקט 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 -> {
    }
}

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

יצירת אנשי קשר בלי לציין חשבון

אם חשבון ברירת המחדל מוגדר, בדרך כלל אין צורך לציין חשבון באופן מפורש כשיוצרים אנשי קשר באפליקציה. המערכת שומרת אוטומטית את איש הקשר החדש בחשבון ברירת המחדל. כך יוצרים איש קשר בלי לציין חשבון.

יצירת ArrayList חדש של אובייקטים מסוג ContentProviderOperation. הרשימה הזו מכילה את הפעולות להוספת איש הקשר הגולמי והנתונים המשויכים אליו.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

יוצרים ContentProviderOperation חדש כדי להוסיף את נתונים גולמיים של איש קשר. מכיוון שלא ציינת חשבון, אין צורך לכלול את ACCOUNT_TYPE ואת ACCOUNT_NAME.

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

מוסיפים עוד אובייקטים של ContentProviderOperation לרשימת הפעולות כדי לכלול את שדות איש הקשר (כמו שם, מספר טלפון, אימייל). לאחר מכן מריצים את פעולת האצווה כדי ליצור את איש הקשר.

Kotlin

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

Java

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

יצירת אנשי קשר בחשבון בענן

כדי ליצור איש קשר בחשבון בענן, מוסיפים את השורה של נתונים גולמיים של איש קשר לטבלה ContactsContract.RawContacts ומציינים את החשבון בענן. לשם כך:

יצירת ArrayList חדש של אובייקטים מסוג ContentProviderOperation.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

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

מוסיפים לרשימת הפעולות אובייקטים אחרים של ContentProviderOperation כדי לכלול את שדות אנשי הקשר ומבצעים את פעולת האצווה כדי ליצור את איש הקשר.

יצירת אנשי קשר בחשבון המקומי

כדי ליצור איש קשר בחשבון המקומי, מוסיפים שורה חדשה של נתונים גולמיים של איש קשר לטבלה ContactsContract.RawContacts ומציינים את פרטי החשבון המקומי:

יצירת ArrayList חדש של אובייקטים מסוג ContentProviderOperation.

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

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

מוסיפים לרשימת הפעולות אובייקטים אחרים של ContentProviderOperation כדי לכלול את שדות אנשי הקשר, ומבצעים את פעולות האצווה כדי ליצור את איש הקשר.