Gmail के लिए Android पर कॉन्टेंट उपलब्ध कराने वाली कंपनी

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 यूआरआई हासिल की जा सकती है. हमने यूआरआई बनाने और दिखाई गई कॉलम को तय करने के लिए, GmailContract.java नाम की एक आसान क्लास दी है.

कोई ऐप्लिकेशन इस यूआरआई से सीधे तौर पर क्वेरी कर सकता है. हालांकि, बेहतर होगा कि वह CursorLoader का इस्तेमाल करे, ताकि खाते के सभी लेबल की जानकारी वाला कर्सर मिल सके:

Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);

इस कर्सर में मौजूद डेटा की मदद से, यूआरआई वैल्यू को GmailContract.Labels.URI कॉलम में सेव किया जा सकता है. इससे किसी एक लेबल पर क्वेरी की जा सकती है और उसमें होने वाले बदलावों को देखा जा सकता है.

पहले से तय किए गए लेबल के लिए NAME की वैल्यू, स्थान-भाषा के हिसाब से अलग-अलग हो सकती है. इसलिए, 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
        }
    }
}

ज़्यादा मदद पाने के लिए, कॉन्टेंट उपलब्ध कराने वाले व्यक्ति या कंपनी के बारे में बुनियादी जानकारी लेख पढ़ें

उदाहरण देखें

कॉन्टेंट देने वाले इस ऐप्लिकेशन का उदाहरण देखने के लिए, सैंपल ऐप्लिकेशन डाउनलोड करें.