ספק תוכן 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 */);

פנייה לספק התוכן

לאחר שבוחרים כתובת אימייל, אפשר לקבל ContentProvider ה-URI שלגביו יש לשלוח שאילתה. סיפקנו מחלקה פשוטה שנקראת 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
        }
    }
}

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

עיון בדוגמה

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