Android Gmail 앱에는 서드 파티 개발자가 이름, 읽지 않은 항목 수와 같은 라벨 정보를 가져오고 정보가 변경될 때 업데이트된 상태를 유지하는 데 사용할 수 있는 콘텐츠 제공자가 포함되어 있습니다. 예를 들어 앱이나 위젯은 특정 계정의 받은편지함에 있는 읽지 않은 메일 수를 표시할 수 있습니다.
// 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*/);
이 커서의 데이터를 사용하여 GmailContract.Labels.URI 열에 URI 값을 유지하여 단일 라벨의 변경사항을 쿼리하고 감시할 수 있습니다.
사전 정의된 라벨의 NAME 값은 언어에 따라 다를 수 있으므로 GmailContract.Labels.NAME를 사용하지 마세요. 대신 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}}}
[[["이해하기 쉬움","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(UTC)"],[],[],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)."]]