يتضمّن تطبيق 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 وتحديد الأعمدة التي يتم عرضها.
يمكن لأي تطبيق طلب البحث عن معرّف الموارد المنتظم هذا مباشرةً، أو الأفضل من ذلك، استخدام
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
}
}
}
للحصول على مزيد من المساعدة، يُرجى قراءة أساسيات مقدّم المحتوى.
مراجعة مثال
للاطّلاع على مثال على أداة توفير المحتوى هذه أثناء العمل، يمكنك تنزيل تطبيق نموذجي.