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