با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
برنامه Android Gmail شامل ارائهدهنده محتوا است که توسعهدهندگان شخص ثالث میتوانند از آن برای بازیابی اطلاعات برچسب مانند نام و تعداد خواندهنشده استفاده کنند و با تغییر آن اطلاعات بهروز بمانند. به عنوان مثال، یک برنامه یا ویجت می تواند تعداد خوانده نشده صندوق ورودی یک حساب خاص را نمایش دهد.
قبل از استفاده از این ارائهدهنده محتوا، با روش GmailContract.canReadLabels(Context) تماس بگیرید تا مشخص کنید آیا نسخه کاربر از برنامه Gmail از این پرسشها پشتیبانی میکند یا خیر.
یک حساب جیمیل معتبر برای پرس و جو پیدا کنید
یک برنامه ابتدا باید آدرس ایمیل یک حساب Gmail معتبر را پیدا کند تا اطلاعات برچسب را جستجو کند. با مجوز GET_ACCOUNTS ، AccountManager می تواند این اطلاعات را برگرداند:
// Get the account list, and pick the first onefinalStringACCOUNT_TYPE_GOOGLE="com.google";finalString[]FEATURES_MAIL={"service_mail"};AccountManager.get(this).getAccountsByTypeAndFeatures(ACCOUNT_TYPE_GOOGLE,FEATURES_MAIL,newAccountManagerCallback(){@Overridepublicvoidrun(AccountManagerFuturefuture){Account[]accounts=null;try{accounts=future.getResult();if(accounts!=null&&accounts.length>0){StringselectedAccount=accounts[0].name;queryLabels(selectedAccount);}}catch(OperationCanceledExceptionoce){// TODO: handle exception}catch(IOExceptionioe){// TODO: handle exception}catch(AuthenticatorExceptionae){// TODO: handle exception}}},null/*handler*/);
از ارائه دهنده محتوا پرس و جو کنید
با انتخاب یک آدرس ایمیل، میتوانید یک URI ContentProvider برای پرس و جو دریافت کنید. ما یک کلاس ساده به نام GmailContract.java برای ساخت URI و تعریف ستون های برگشتی ارائه کرده ایم.
یک برنامه میتواند مستقیماً از این URI پرس و جو کند - یا بهتر است بگوییم، از CursorLoader - برای به دست آوردن مکاننما با اطلاعات همه برچسبهای یک حساب:
با دادههای موجود در این مکاننما، میتوانید مقدار URI را در ستون GmailContract.Labels.URI حفظ کنید تا تغییرات را روی یک برچسب پرس و جو کنید و مراقب آن باشید.
مقدار NAME برای برچسبهای از پیش تعریفشده میتواند براساس منطقه متفاوت باشد، بنابراین از GmailContract.Labels.NAME استفاده نکنید. درعوض، میتوانید برچسبهای از پیش تعریفشده مانند Inbox، Sent یا Drafts را با استفاده از مقدار String در ستون GmailContract.Labels.CANONICAL_NAME بهصورت برنامهنویسی شناسایی کنید:
// loop through the cursor and find the Inboxif(labelsCursor!=null){finalStringinboxCanonicalName=GmailContract.Labels.LabelCanonicalName.CANONICAL_NAME_INBOX;finalintcanonicalNameIndex=labelsCursor.getColumnIndexOrThrow(GmailContract.Labels.CANONICAL_NAME);while(labelsCursor.moveToNext()){if(inboxCanonicalName.equals(labelsCursor.getString(canonicalNameIndex))){// this row corresponds to the Inbox}}}
تاریخ آخرین بهروزرسانی 2025-08-29 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2025-08-29 بهوقت ساعت هماهنگ جهانی."],[],[],null,["# Android content provider for Gmail\n\nThe Android Gmail app includes a\n[content provider](https://developer.android.com/guide/topics/providers/content-providers)\nthat third party developers can use to retrieve label information like name and\nunread count, and stay updated as that information changes. For example, an app\nor widget could display the unread count of a specific account's inbox.\n| **Note:** This content provider is supported in versions after 2.3.6 (Froyo/Gingerbread) and 4.0.5 (Honeycomb/ICS).\n\nBefore using this content provider, call the\n[`GmailContract.canReadLabels(Context)`](/workspace/gmail/android/com/google/android/gm/contentprovider/GmailContract#public-static-boolean-canreadlabels-context-c)\nmethod to determine whether the user's version of the Gmail app supports these\nqueries.\n\nFind a valid Gmail account to query\n-----------------------------------\n\nAn app must first find the email address of a valid Gmail account to query for\nlabel information. With the\n[`GET_ACCOUNTS`](http://developer.android.com/reference/android/Manifest.permission.html#GET_ACCOUNTS)\npermission, the\n[`AccountManager`](http://developer.android.com/reference/android/accounts/AccountManager.html)\ncan return this information: \n\n // Get the account list, and pick the first one\n final String ACCOUNT_TYPE_GOOGLE = \"com.google\";\n final String[] FEATURES_MAIL = {\n \"service_mail\"\n };\n AccountManager.get(this).getAccountsByTypeAndFeatures(ACCOUNT_TYPE_GOOGLE, FEATURES_MAIL,\n new AccountManagerCallback() {\n @Override\n public void run(AccountManagerFuture future) {\n Account[] accounts = null;\n try {\n accounts = future.getResult();\n if (accounts != null && accounts.length > 0) {\n String selectedAccount = accounts[0].name;\n queryLabels(selectedAccount);\n }\n\n } catch (OperationCanceledException oce) {\n // TODO: handle exception\n } catch (IOException ioe) {\n // TODO: handle exception\n } catch (AuthenticatorException ae) {\n // TODO: handle exception\n }\n }\n }, null /* handler */);\n\nQuery the content provider\n--------------------------\n\nWith an email address selected, you can then obtain a\n[`ContentProvider`](http://developer.android.com/guide/topics/providers/content-provider-basics.html)\nURI to query against. We've provided a simple class called\n[`GmailContract.java`](/workspace/gmail/android/com/google/android/gm/contentprovider/GmailContract)\nto construct the URI and define the columns returned.\n\nAn app can query this URI directly --- or better yet, use a\n[`CursorLoader`](http://developer.android.com/reference/android/content/CursorLoader.html)\n--- to obtain a Cursor with information for all labels on an account: \n\n Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);\n\nWith the data in this cursor, you can then persist the URI value in the\n`GmailContract.Labels.URI` column to query and watch for changes on a\nsingle label.\n\nThe `NAME` value for pre-defined labels can vary by locale, so don't\nuse `GmailContract.Labels.NAME`. Instead, you can programmatically\nidentify pre-defined labels like Inbox, Sent or Drafts using the String value in\nthe `GmailContract.Labels.CANONICAL_NAME` column: \n\n // loop through the cursor and find the Inbox\n if (labelsCursor != null) {\n final String inboxCanonicalName = GmailContract.Labels.LabelCanonicalName.CANONICAL_NAME_INBOX;\n final int canonicalNameIndex = labelsCursor.getColumnIndexOrThrow(GmailContract.Labels.CANONICAL_NAME);\n while (labelsCursor.moveToNext()) {\n if (inboxCanonicalName.equals(labelsCursor.getString(canonicalNameIndex))) {\n // this row corresponds to the Inbox\n }\n }\n }\n\nFor more help, read\n[Content provider basics](https://developer.android.com/guide/topics/providers/content-provider-basics.html)\n\nReview an example\n-----------------\n\nTo see an example of this content provider in action,\n[download a sample app](/static/workspace/gmail/android/android-gmail-api-sample.tar.gz)."]]