مزوّد محتوى 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
        }
    }
}

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

مراجعة مثال

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