برنامه Android Gmail شامل ارائهدهنده محتوا است که توسعهدهندگان شخص ثالث میتوانند از آن برای بازیابی اطلاعات برچسب مانند نام و تعداد خواندهنشده استفاده کنند و با تغییر آن اطلاعات بهروز بمانند. به عنوان مثال، یک برنامه یا ویجت می تواند تعداد خوانده نشده صندوق ورودی یک حساب خاص را نمایش دهد.
قبل از استفاده از این ارائهدهنده محتوا، با روش GmailContract.canReadLabels(Context)
تماس بگیرید تا مشخص کنید آیا نسخه کاربر از برنامه 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 و تعریف ستون های برگشتی ارائه کرده ایم.
یک برنامه میتواند مستقیماً از این URI پرس و جو کند - یا بهتر است بگوییم، از CursorLoader
- برای به دست آوردن مکاننما با اطلاعات همه برچسبهای یک حساب:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
با دادههای موجود در این مکاننما، میتوانید مقدار URI را در ستون GmailContract.Labels.URI
حفظ کنید تا تغییرات را روی یک برچسب پرس و جو کنید و مراقب آن باشید.
مقدار NAME
برای برچسبهای از پیش تعریفشده میتواند براساس منطقه متفاوت باشد، بنابراین از GmailContract.Labels.NAME
استفاده نکنید. درعوض، میتوانید برچسبهای از پیش تعریفشده مانند Inbox، Sent یا Drafts را با استفاده از مقدار String در ستون 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
}
}
}
برای راهنمایی بیشتر، اصول ارائه دهنده محتوا را بخوانید
یک مثال را مرور کنید
برای مشاهده نمونه ای از این ارائه دهنده محتوا در عمل، یک برنامه نمونه را دانلود کنید .