ספק תוכן 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.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
        }
    }
}

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

סקירת דוגמה

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