אפליקציית 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
}
}
}
למידע נוסף, אפשר לקרוא את המאמר יסודות לספקי תוכן
דוגמה
כדי לראות דוגמה של ספק התוכן הזה בפעולה, תוכלו להוריד אפליקציה לדוגמה.