אפליקציית Gmail ל-Android כוללת ספק תוכן שמפתחי צד שלישי יכולים להשתמש בהם כדי לאחזר פרטי תוויות כמו שם לא נקראו, והישארו מעודכנים כאשר המידע משתנה. לדוגמה, אפליקציה או בווידג'ט הזה יכולים להציג את מספר ההודעות שלא נקראו בתיבת הדואר הנכנס של חשבון ספציפי.
לפני השימוש בספק התוכן הזה, צריך לקרוא אל
GmailContract.canReadLabels(Context)
כדי לקבוע אם גרסת אפליקציית Gmail של המשתמש תומכת
שאילתות.
חיפוש חשבון Gmail תקין לשליחת שאילתה
האפליקציה צריכה קודם למצוא את כתובת האימייל של חשבון Gmail חוקי לשליחת שאילתה אליה
פרטי התווית. עם
GET_ACCOUNTS
את ההרשאה,
AccountManager
יכול להחזיר את המידע הזה:
// Get the account list, and pick the first one
final String ACCOUNT_TYPE_GOOGLE = "com.google";
final String[] FEATURES_MAIL = {
"service_mail"
};
AccountManager.get(this).getAccountsByTypeAndFeatures(ACCOUNT_TYPE_GOOGLE, FEATURES_MAIL,
new AccountManagerCallback() {
@Override
public void run(AccountManagerFuture future) {
Account[] accounts = null;
try {
accounts = future.getResult();
if (accounts != null && accounts.length > 0) {
String selectedAccount = accounts[0].name;
queryLabels(selectedAccount);
}
} catch (OperationCanceledException oce) {
// TODO: handle exception
} catch (IOException ioe) {
// TODO: handle exception
} catch (AuthenticatorException ae) {
// TODO: handle exception
}
}
}, null /* handler */);
פנייה לספק התוכן
לאחר שבוחרים כתובת אימייל, אפשר לקבל
ContentProvider
ה-URI שלגביו יש לשלוח שאילתה. סיפקנו מחלקה פשוטה שנקראת
GmailContract.java
כדי לבנות את ה-URI ולהגדיר את העמודות המוחזרות.
אפליקציה יכולה לשלוח שאילתה ל-URI הזה ישירות. לחלופין, מומלץ להשתמש
CursorLoader
— כדי לקבל סמן עם מידע לגבי כל התוויות בחשבון:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
לאחר מכן, בעזרת הנתונים בסמן זה, תוכל לשמור את ערך ה-URI
עמודה GmailContract.Labels.URI
לשאילתה ולמעקב אחר שינויים
תווית אחת.
הערך NAME
של תוויות מוגדרות מראש עשוי להשתנות בהתאם למקום, לכן אין
להשתמש ב-GmailContract.Labels.NAME
. במקום זאת, אפשר
לזהות תוויות מוגדרות מראש כגון 'תיבת דואר נכנס', 'נשלח' או 'טיוטות' באמצעות ערך המחרוזת ב-
העמודה GmailContract.Labels.CANONICAL_NAME
:
// loop through the cursor and find the Inbox
if (labelsCursor != null) {
final String inboxCanonicalName = GmailContract.Labels.LabelCanonicalName.CANONICAL_NAME_INBOX;
final int canonicalNameIndex = labelsCursor.getColumnIndexOrThrow(GmailContract.Labels.CANONICAL_NAME);
while (labelsCursor.moveToNext()) {
if (inboxCanonicalName.equals(labelsCursor.getString(canonicalNameIndex))) {
// this row corresponds to the Inbox
}
}
}
לקבלת עזרה נוספת, אפשר לקרוא היסודות של ספקי תוכן
עיון בדוגמה
כדי לראות דוגמה של ספק התוכן הזה בפעולה, מורידים אפליקציה לדוגמה.