יכול להיות שאפליקציות יאפשרו למשתמשים ליצור ולאחסן אנשי קשר. בדרך כלל אפשר לשמור את אנשי הקשר האלה בשני מקומות:
- חשבון בענן: שמירת אנשי קשר בחשבון שמשויך לשירות ענן (כמו Google Cloud) כדי לאפשר סנכרון וגיבוי של אנשי הקשר.
- חשבון מקומי: אפשר לאחסן את אנשי הקשר באופן מקומי במכשיר.
המשתמשים יכולים להגדיר את מיקום האחסון המועדף שלהם בהגדרות המכשיר. המיקום המועדף הזה נקרא חשבון ברירת המחדל, והוא משמש כשיוצרים אנשי קשר. האפליקציות צריכות להתחשב בהעדפה הזו. במאמר הזה מוסבר איך לעבוד עם מיקומים שונים לאחסון אנשי קשר, כולל חשבונות בענן וחשבונות מקומיים, ואיך ליישם שיטות מומלצות לניהול העדפות משתמשים. החשבון המקומי מתייחס לאחסון אנשי קשר ישירות במכשיר.
אחזור חשבון ברירת המחדל
כדי לקבוע את חשבון ברירת המחדל לאנשי קשר חדשים, משתמשים בContactsContract.RawContacts.DefaultAccount
כדי לקבל את האובייקט ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
, צריך להתקשר למספר getDefaultAccountForNewContacts()
. האובייקט הזה מכיל מידע על הגדרת ברירת המחדל של החשבון.
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
מכיל:
- מצב: מציין אם חשבון ברירת מחדל מוגדר, ואם כן, מה הקטגוריה של החשבון (Cloud, מקומי או 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
כדי לכלול את שדות אנשי הקשר, ומבצעים את הפעולות בקבוצה כדי ליצור את איש הקשר.