ספק תוכן Android ל-Gmail

אפליקציית 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 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
        }
    }
}

לעזרה נוספת, קראו את המאמר היסודות של ספקי תוכן

עיון בדוגמה

כדי לראות דוגמה של ספק התוכן הזה בפעולה, צריך להוריד אפליקציה לדוגמה.