অ্যান্ড্রয়েড জিমেইল অ্যাপে একটি কন্টেন্ট প্রোভাইডার রয়েছে, যা ব্যবহার করে থার্ড-পার্টি ডেভেলপাররা নাম এবং অপঠিত বার্তার সংখ্যার মতো লেবেল-সম্পর্কিত তথ্য সংগ্রহ করতে পারে এবং সেই তথ্যের পরিবর্তন হলে নিজেদের আপডেট রাখতে পারে। উদাহরণস্বরূপ, কোনো অ্যাপ বা উইজেট একটি নির্দিষ্ট অ্যাকাউন্টের ইনবক্সের অপঠিত বার্তার সংখ্যা প্রদর্শন করতে পারে।
এই কন্টেন্ট প্রোভাইডারটি ব্যবহার করার আগে, ব্যবহারকারীর Gmail অ্যাপের সংস্করণটি এই কোয়েরিগুলো সমর্থন করে কিনা তা নির্ধারণ করতে GmailContract.canReadLabels(Context) মেথডটি কল করুন।
অনুসন্ধান করার জন্য একটি বৈধ জিমেইল অ্যাকাউন্ট খুঁজুন।
লেবেলের তথ্য জানতে একটি অ্যাপকে প্রথমে একটি বৈধ জিমেইল অ্যাকাউন্টের ইমেল ঠিকানা খুঁজে বের করতে হবে। 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 URI পেতে পারেন। URI তৈরি করতে এবং ফেরত আসা কলামগুলো নির্ধারণ করতে আমরা GmailContract.java নামে একটি সহজ ক্লাস দিয়েছি।
একটি অ্যাপ সরাসরি এই URI-টি কোয়েরি করতে পারে — অথবা আরও ভালো হয়, একটি CursorLoader ব্যবহার করে — একটি অ্যাকাউন্টের সমস্ত লেবেলের তথ্যসহ একটি কার্সার পেতে পারে:
Cursor labelsCursor = getContentResolver().query(GmailContract.Labels.getLabelsUri(selectedAccount), null, null, null, null);
এই কার্সরে থাকা ডেটা ব্যবহার করে, আপনি GmailContract.Labels.URI কলামে URI মানটি সংরক্ষণ করতে পারবেন, যার মাধ্যমে একটি নির্দিষ্ট লেবেলের পরিবর্তন অনুসন্ধান ও পর্যবেক্ষণ করা যাবে।
পূর্ব-নির্ধারিত লেবেলগুলির NAME মান লোকেল অনুযায়ী ভিন্ন হতে পারে, তাই GmailContract.Labels.NAME ব্যবহার করবেন না। এর পরিবর্তে, আপনি GmailContract.Labels.CANONICAL_NAME কলামের String মান ব্যবহার করে Inbox, Sent বা Drafts-এর মতো পূর্ব-নির্ধারিত লেবেলগুলিকে প্রোগ্রাম্যাটিকভাবে শনাক্ত করতে পারেন:
// 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
}
}
}
আরও সাহায্যের জন্য, কন্টেন্ট প্রোভাইডারের প্রাথমিক বিষয়গুলো পড়ুন।
একটি উদাহরণ পর্যালোচনা করুন
এই কন্টেন্ট প্রোভাইডারটির কার্যকারিতা দেখতে, একটি নমুনা অ্যাপ ডাউনলোড করুন ।