אפליקציית 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 */);
שליחת שאילתה לספק התוכן
אחרי שבוחרים כתובת אימייל, אפשר לקבל URI של ContentProvider
שאפשר להריץ עליו שאילתות. סיפקנו מחלקה פשוטה בשם
GmailContract.java
כדי ליצור את ה-URI ולהגדיר את העמודות שמוחזרות.
אפליקציה יכולה לשלוח שאילתה ל-URI הזה ישירות – או, עדיף, להשתמש ב-CursorLoader
– כדי לקבל Cursor עם מידע על כל התוויות בחשבון:
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
}
}
}
מידע נוסף זמין במאמר יסודות בנושא ספקי תוכן.
דוגמה
כדי לראות דוגמה של ספק התוכן הזה בפעולה, מורידים אפליקציה לדוגמה.