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

בעזרת הנתונים ב-Cursor, אפשר לשמור את ערך ה-URI בעמודה GmailContract.Labels.URI כדי להריץ שאילתה ולעקוב אחרי שינויים בתווית אחת.

הערך NAME של תוויות מוגדרות מראש יכול להשתנות בהתאם ללוקאל, לכן לא מומלץ להשתמש ב-GmailContract.Labels.NAME. במקום זאת, אפשר לזהות באופן פרוגרמטי תוויות מוגדרות מראש כמו Inbox,‏ Sent או Drafts באמצעות ערך המחרוזת בעמודה GmailContract.Labels.CANONICAL_NAME:

// Query for all labels and find the Inbox.
try (Cursor labelsCursor = getContentResolver().query(
        GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null)) {
    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.
            }
        }
    }
}

מידע נוסף זמין במאמר בנושא ספקי תוכן – מידע בסיסי.

דוגמה

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