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