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
नाम की एक क्लास दी है. कोई ऐप्लिकेशन, इस यूआरआई के लिए सीधे क्वेरी कर सकता है.
Cursor में मौजूद डेटा की मदद से,
GmailContract.Labels.URI
कॉलम में यूआरआई की वैल्यू सेव की जा सकती है. इससे, किसी एक लेबल पर क्वेरी की जा सकती है और उसमें होने वाले बदलावों पर नज़र रखी जा सकती है.
पहले से तय किए गए लेबल के लिए, NAME की वैल्यू, स्थानीय भाषा के हिसाब से अलग-अलग हो सकती है. इसलिए,
GmailContract.Labels.NAME का इस्तेमाल न करें.
इसके बजाय, पहले से तय किए गए लेबल की पहचान प्रोग्राम के ज़रिए की जा सकती है. जैसे, इनबॉक्स,
भेजे गए मैसेज या ड्राफ़्ट. इसके लिए,
GmailContract.Labels.CANONICAL_NAME
कॉलम में स्ट्रिंग वैल्यू का इस्तेमाल करें:
// Query for all labels and find the Inbox.
try (Cursor labelsCursor = getContentResolver().query(
GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null)) {
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.
}
}
}
}
ज़्यादा जानकारी के लिए, कॉन्टेंट देने की सुविधा की बुनियादी बातें लेख पढ़ें.
एक उदाहरण देखना
कॉन्टेंट देने की इस सुविधा का उदाहरण देखने के लिए, सैंपल ऐप्लिकेशन डाउनलोड करें.