אפליקציות יכולות לאפשר למשתמשים ליצור ולשמור אנשי קשר. בדרך כלל אפשר לשמור את אנשי הקשר האלה בשני מקומות:
- חשבון בענן: שמירת אנשי קשר בחשבון שמשויך לשירות ענן (כמו 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()
)
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 חדש כדי להוסיף את הנתונים הגולמיים של איש הקשר. משתמשים ב-method 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 לרשימת הפעולות כדי לכלול את השדות של איש הקשר, ומבצעים את הפעולות באצווה כדי ליצור את איש הקשר.