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