[android] Intent.ACTION_PICK से लौटे URI से विशिष्ट संपर्क जानकारी प्राप्त करें



Answers

जैसा कि यह पता चला है, ऐसा करने का एक बेहतर तरीका है।

जैसा कि मैंने उल्लेख किया है, संपर्क संपर्क। संपर्क.एन्टीटी कक्षा एपीआई 11 तक उपलब्ध नहीं थी। हालांकि, संपर्क कॉन्ट्रैक्ट .डेटा वर्ग एपीआई 5 में वापस उपलब्ध था, और आप उस श्रेणी का काफी हद तक उसी प्रकार उपयोग कर सकते हैं जिस तरह से आप इकाई वर्ग का उपयोग करते हैं ।

मैंने अपना कोड अपडेट किया है यह इकाई वर्ग के कोड के समान है, और बड़े पैमाने पर उसी तरह काम करता है। हालांकि, मैंने इसे जिंजरब्रेड चलाने वाले अपने फोन के साथ परीक्षण किया है, और यह सिर्फ ठीक काम करता है।

मुझे एक बदलाव करना था: यह प्रारंभिक क्वेरी से ContactsContract.Data.RAW_CONTACT_ID को प्राप्त करने का एक तरीका नहीं है । और यह आईडी आपके आईडी से मिलती-जुलती नहीं है, जैसे ContactsContract.Contacts._ID कॉन्ट्रैक्ट। ContactsContract.Contacts._ID । इसके बजाय, मैंने ContactsContract.Contacts.DISPLAY_NAME निरंतर पर पूछताछ की, जो हर संपर्क कंट्रैक्ट वर्ग में बहुत अधिक सुसंगत है।

यहां काम कर रहे कोड है:

        Cursor cursor;  // Cursor object
        String mime;    // MIME type
        int dataIdx;    // Index of DATA1 column
        int mimeIdx;    // Index of MIMETYPE column
        int nameIdx;    // Index of DISPLAY_NAME column

        // Get the name
        cursor = getContentResolver().query(params[0],
                new String[] { ContactsContract.Contacts.DISPLAY_NAME },
                null, null, null);
        if (cursor.moveToFirst()) {
            nameIdx = cursor.getColumnIndex(
                    ContactsContract.Contacts.DISPLAY_NAME);
            name = cursor.getString(nameIdx);

            // Set up the projection
            String[] projection = {
                    ContactsContract.Data.DISPLAY_NAME,
                    ContactsContract.Contacts.Data.DATA1,
                    ContactsContract.Contacts.Data.MIMETYPE };

            // Query ContactsContract.Data
            cursor = getContentResolver().query(
                    ContactsContract.Data.CONTENT_URI, projection,
                    ContactsContract.Data.DISPLAY_NAME + " = ?",
                    new String[] { name },
                    null);

            if (cursor.moveToFirst()) {
                // Get the indexes of the MIME type and data
                mimeIdx = cursor.getColumnIndex(
                        ContactsContract.Contacts.Data.MIMETYPE);
                dataIdx = cursor.getColumnIndex(
                        ContactsContract.Contacts.Data.DATA1);

                // Match the data to the MIME type, store in variables
                do {
                    mime = cursor.getString(mimeIdx);
                    if (ContactsContract.CommonDataKinds.Email
                            .CONTENT_ITEM_TYPE.equalsIgnoreCase(mime)) {
                        email = cursor.getString(dataIdx);
                    }
                    if (ContactsContract.CommonDataKinds.Phone
                            .CONTENT_ITEM_TYPE.equalsIgnoreCase(mime)) {
                        phone = cursor.getString(dataIdx);
                        phone = PhoneNumberUtils.formatNumber(phone);
                    }
                } while (cursor.moveToNext());
            }
        }
Question

मैं एक एंड्रॉइड ऐप लिख रहा हूं जिसमें डेटा प्रकार होता है जो एक व्यक्ति (विशेष रूप से, किसी बच्चे के माता-पिता या अभिभावक) को दर्शाता है। मैं एंड्रॉइड डिवाइस में संपर्क डेटाबेस से प्रासंगिक डेटा फ़ील्ड "आयात" करने में सक्षम होना चाहता हूं। (यह वैकल्पिक होना चाहिए; अर्थात, यह एक आवश्यकता नहीं होगी कि माता-पिता / अभिभावक संपर्क डेटाबेस में पहले से ही मौजूद हैं, न ही वे नए माता-पिता / अभिभावकों को जोड़ते हैं तो संपर्क डेटाबेस अपडेट होगा।)

अब तक, मैंने विशिष्ट संपर्क (Intent.ACTION_PICK का उपयोग करने के लिए) का चयन करने के लिए एक नया आशय शुरू करने के लिए कोड लिखा है। मैं तब एक यूआरआई प्राप्त करता हूं जो डेटाबेस में विशिष्ट संपर्क का प्रतिनिधित्व करता है।

दुर्भाग्य से, मुझे नहीं पता कि अगले चरण क्या है ऐसा लगता है कि ऐसा करने के लिए दुनिया में सबसे आसान चीज होनी चाहिए, लेकिन जाहिरा तौर पर नहीं। मैंने एंड्रॉइड डेवलपर वेबसाइट पर प्रलेखन के माध्यम से पढ़ा है, और मैंने एक से अधिक एंड्रॉइड बुक में देखा है। कोई आनंद नहीं है।

मैं जो विशिष्ट जानकारी प्राप्त करना चाहता हूं, वह है:

  1. संपर्क का नाम (यदि संभव हो तो पहले और अंतिम रूप से)

  2. संपर्क का (प्राथमिक) ईमेल पता

  3. संपर्क का सेल फोन नंबर

मुझे लगता है कि यह ContentResolver का उपयोग करके पूछताछ के साथ संभव होना चाहिए, लेकिन मुझे यह नहीं पता है कि यह कैसे यूआरआई के साथ आशय से वापस आ गया। अधिकांश प्रलेखन मानते हैं कि आपके पास संपर्क आईडी है, न कि संपर्क का यूआरआई। इसके अलावा, मुझे यह नहीं पता है कि क्वेरी के लिए प्रक्षेपण में किस प्रकार के फ़ील्ड डाल सकते हैं, यह मानते हुए कि यह जो भी मैं चाहता हूं, यह करने का सही तरीका भी है।

यहां मेरा आरंभ कोड है:

// In a button's onClick event handler:
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);

// In onActivityResult:
if (resultCode == RESULT_OK) {
    if (requestCode == PICK_CONTACT) {
        contactURI = data.getData();
        // NOW WHAT?
    }
}



Related