سؤال

أحاول استرجاع اسم جهة الاتصال ورقم الهاتف وعنوانه من قائمة جهات الاتصال التي تعمل بنظام Android. الاسم والهاتف مستقيم إلى الأمام، ولكن يبدو أن العنوان غير قابل للوصول مع مستوى 1.6 API.

هل اكتشف شخص ما كيفية الحصول على عنوان الاتصال؟ أيضا هناك API جديد تماما في 2.0. كيف يمكنني الاستفادة من هذا وتراجع إلى API القديم باستخدام 1 ثنائي. إذا كان ذلك ممكنا.

هل كانت مفيدة؟

المحلول

قبل Android 2.0 تحتاج إلى استعلام جهات الاتصال. contactmethods.content_uri للحصول على العناوين البريدية التي ستحتاج إليها

Contacts.ContactMethods.PERSON_ID + "=? and " + Contacts.ContactMethods.KIND + "=?"

لاختيار المعلمة Selectargs:

new String[] { personId, Integer.toString(Contacts.KIND_POSTAL) }

اعتبارا من 2.0، تستخدم جهات الاتصال الجديدة التي هي أكثر تعقيدا بكثير لأن الاتصال يمكن الآن إجمال المعلومات عبر عدد من المصادر. بعض منشورات مجموعة جيدة على API الجديدة هنا و هنا.

الطريقة الموصى بها لاستهداف واجهات برمجة تطبيقات متعددة منصات من نفس الثنائي هي استخدام الانعكاس (انظر هذا مشاركة مدونة). لقد وجدت رغم أنه إذا استهدفت تطبيقك عند 1.6 أو أقل في البيان ولكن قم بتعيين مسار الإنشاء لالتقاط ملف JAR Android 2.0، فيمكنك الاتصال ب 2.0 واجهات برمجة التطبيقات دون الحاجة إلى انعكاس. تحتاج فقط إلى أن تكون حذرا للغاية أن الفصول التي تعتمد على 2.0 فصول لا يتم تحميلها في جهاز 1.6 أو محمل الفئة برمي. لتجنب ذلك، ستحتاج إلى استخدام نوع من المصنع لكسر التبعيات (أو إطار DI مثل الخيار). انظر الى هذا نشر لمزيد من المناقشات.

نصائح أخرى

بفضل أنتوني فوللوني (أقل) للربط ب "كيفية قراءة جهات الاتصال"، كان ذلك مفيدا. لتمديد محتوى هذا الرابط مع رمز كيفية قراءة "العنوان"، يجب أن تساعد هذه الخطوط! يجب عليهم جلب العنوان البريدي، كما ترون، من خلال الاستعلام باستخدام byduredpostal. المقاتلون.

            Cursor postals = getContentResolver().query(
                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
                null,
                ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID + " = "
                        + contactId, null, null);
        int postFormattedNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS);
        int postTypeNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE);
        int postStreetNdx = postals.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET);
        while (postals.moveToNext()) {
            String postalData = postals.getString(postFormattedNdx);
            postalCat = postalCat+ postalData+ ", [";
            postalData = String.valueOf(postals.getInt(postTypeNdx));
            postalCat = postalCat+ postalData+ "], ";
            postalData = postals.getString(postStreetNdx);
            postalCat = postalCat+ postalData+ " ";
        }
        postals.close();

بقية هذا الرابط هل جلب بالفعل الاسم والهواتف (عند تصحيح خطأ "رقم هاتف" للحصول على القيمة المنطقية - لا يتم تحليل المنطقي بشكل صحيح)

على أجهزة الصراف الآلي هاتفي، ولكن هنا هو رابط مع سؤال مماثل لك.

آمل أن يساعدك هذا أو يشيرك في الاتجاه الصحيح.

تعديل:

لقد ذكرت، وأود أن تحرير إجابتي الأصلية على الأقل نحو ما كنت تبحث عنه، وربما ربما يكون هذا شريرا متأخرا ولديك بالفعل إجابتك بالفعل ولكن هنا معلومات أكثر إذا كنت لا تزال تبحث عن بعضها، ما تحتاجه للبحث عنه هو اتصالاتكمالمدالية.mondatakinds. ويمكنك استخراج تفاصيل محددة فيما يتعلق بالعنوان. كما هو مثال باستخدام Android 2.0 هنا يظهر بعض الأمثلة استخراج المعلومات من جهة اتصال، أي إذا لم تكن قد أحسبها بالفعل.

حظا طيبا وفقك الله.

هذه هي الطريقة التي فعلتها مع Android 2.3.3:

            String where = ContactsContract.Data._ID + " = "
                                                     + uriData.getLastPathSegment()
                                                     + " AND ContactsContract.Data.MIMETYPE = '"
                                                     + ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE
                                                     + "'";

            String[] projection = new String[] { StructuredPostal.STREET,
                                                 StructuredPostal.CITY,
                                                 StructuredPostal.REGION,
                                                 StructuredPostal.POSTCODE,
                                                 StructuredPostal.COUNTRY};

            Cursor cursor = getContentResolver().query( ContactsContract.Data.CONTENT_URI,
                                                         projection,
                                                         where,
                                                         null,
                                                         null);
            String strOutput = "";
            if (cursor.moveToFirst())
            {
                strOutput += "\n" + cursor.getString(0);
                strOutput += "\n" + cursor.getString(1);
                strOutput += "\n" + cursor.getString(2);
                strOutput += "\n" + cursor.getString(3);
                strOutput += "\n" + cursor.getString(4);
            } 

            cursor.close();

ملاحظة: ال uriData يتم الحصول عليها عن طريق التقاط النية لعرض العنوان. تم حل هذا هنا: ما هي النية المرتبطة ب "عرض عنوان العمل" في جهات الاتصال / بطاقة الاتصال؟

بدلاً من _ID, لا تتردد في المحاولة ContactsContract.Data.CONTACT_ID

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top