يتضمّن تطبيق 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 */);
إجراء طلب البحث في موفّر المحتوى
بعد اختيار عنوان بريد إلكتروني، يمكنك بعد ذلك الحصول على
ContentProvider
معرّف موارد موحّد لإجراء طلب البحث فيه. لقد وفّرنا فئة باسم
GmailContract
لإنشاء معرّف الموارد الموحّد وتحديد الأعمدة المعروضة. يمكن للتطبيق إجراء طلب البحث في معرّف الموارد الموحّد هذا مباشرةً.
باستخدام البيانات في Cursor، يمكنك الاحتفاظ بقيمة معرّف الموارد الموحّد في
GmailContract.Labels.URI
عمود لإجراء طلب البحث عن تصنيف واحد ومراقبة التغييرات فيه.
يمكن أن تختلف قيمة NAME للتصنيفات المحدّدة مسبقًا حسب اللغة، لذا لا تستخدِم
GmailContract.Labels.NAME.
بدلاً من ذلك، يمكنك تحديد التصنيفات المحدّدة مسبقًا، مثل "البريد الوارد"،
"الرسائل المرسَلة" أو "المسودّات"، آليًا باستخدام قيمة السلسلة في
GmailContract.Labels.CANONICAL_NAME
عمود:
// Query for all labels and find the Inbox.
try (Cursor labelsCursor = getContentResolver().query(
GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null)) {
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.
}
}
}
}
لمزيد من المعلومات، يُرجى الاطّلاع على مقالة أساسيات موفّر المحتوى.
مراجعة مثال
للاطّلاع على مثال على موفّر المحتوى هذا أثناء العمل، نزِّل نموذج تطبيق.