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
वैल्यू, स्थानीय भाषा के हिसाब से अलग-अलग हो सकती है. इसलिए, 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
}
}
}
ज़्यादा मदद पाने के लिए, पढ़ें कॉन्टेंट उपलब्ध कराने वाले के लिए बुनियादी जानकारी
उदाहरण देखें
कॉन्टेंट देने वाली इस कंपनी के काम करने का उदाहरण देखने के लिए, सैंपल ऐप्लिकेशन डाउनलोड करें.