يتضمّن تطبيق 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.java
لإنشاء عنوان URL وتحديد الأعمدة التي يتم عرضها.
يمكن للتطبيق طلب معرّف الموارد المنتظم (URI) هذا مباشرةً، أو من الأفضل استخدام CursorLoader
للحصول على مؤشر يحتوي على معلومات عن جميع التصنيفات في الحساب:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
باستخدام البيانات في مؤشر الماوس هذا، يمكنك بعد ذلك الاحتفاظ بقيمة عنوان URL في عمود
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
}
}
}
لمزيد من المساعدة، يُرجى الاطّلاع على مقالة أساسيات مقدّمي المحتوى.
مراجعة مثال
للاطّلاع على مثال على أداة توفير المحتوى هذه، نزِّل نموذج تطبيق.