موفّر محتوى 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
        }
    }
}

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

مراجعة مثال

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