مزوّد محتوى Android في Gmail

يشتمل تطبيق Android Gmail على موفّر محتوى يمكن للمطوّرين التابعين لجهات خارجية استخدامه لاسترداد معلومات التصنيفات، مثل الاسم والعدد غير المقروء، والبقاء على اطّلاع دائم على التغييرات التي تطرأ على هذه المعلومات. على سبيل المثال، يمكن لتطبيق أو أداة عرض عدد الرسائل غير المقروءة في صندوق بريد حساب معين.

قبل استخدام موفِّر المحتوى هذا، اطلب طريقة 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
        }
    }
}

للحصول على مزيد من المساعدة، يُرجى قراءة أساسيات موفّر المحتوى.

مراجعة مثال

للاطّلاع على مثال عملي لموفّر المحتوى هذا، يمكنك تنزيل نموذج تطبيق.