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