Как я могу получить имя и фамилию от сборщика контактов - PullRequest
0 голосов
/ 11 ноября 2011

Я запустил операцию выбора контактов

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                    startActivityForResult(intent, enumRequestCode.PICK_CONTACT.ordinal());

Затем в onActivityResult у меня есть этот код, чтобы получить номер телефона (и display_name, но это не очень хорошо, достаточно ... Мне нужно имя и фамилию, чтобыбыть в состоянии поддерживать ввод различных стран):

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if(enumRequestCode.PICK_CONTACT.ordinal() == requestCode){
              if (resultCode == Activity.RESULT_OK) {
                  Cursor cursor =  managedQuery(data.getData(), null, null, null, null);      
                   while (cursor.moveToNext()) 
                   {           
                       String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                       String name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

                       String phoneNumber = "";
                       int hasPhone = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));


                       String firstName = "";
                       String surName   = "";


                           if (hasPhone >= 1){
                                Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
                                phones.moveToNext();
                                phoneNumber  = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));



  phones.close();
                       }

Я пробовал с:

//  String firstName  = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME));
//  String surName    = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));

Но это не сработало очень хорошо.

IЯ видел это, но это мне не очень помогло: Как узнать имя и фамилию из контактов Android?

Кто-нибудь может мне помочь с этим?

спасибо заранее!

Ответы [ 2 ]

0 голосов
/ 16 марта 2013
cursor = getContentResolver().query(Data.CONTENT_URI,
                  new String[] {Data._ID, Phone.NUMBER, Phone.TYPE, Phone.LABEL},
                  Data.CONTACT_ID + "=?" + " AND "
                          + Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'",
                  new String[] {String.valueOf(id)}, null);

        int lastNameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME);
        int firstNameIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME);

Вот как я это сделал для имени и фамилии ... и действительно для других форм имени с MIMETYPE = StructuredName.CONTENT_ITEM_TYPE .

0 голосов
/ 11 ноября 2011
Cursor cursor =  managedQuery(intent.getData(), null, null, null, null);      
        while (cursor.moveToNext()) {           
            String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            name = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME)); 

            String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

            if (hasPhone.equalsIgnoreCase("1"))
                hasPhone = "true";
            else
                hasPhone = "false" ;

            if (Boolean.parseBoolean(hasPhone)) {
                Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
                if(phones.getCount() > 1) {
                    ArrayList<String> p = new ArrayList<String>();  

                    while (phones.moveToNext()) {
                        p.add(phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                    }
                    final CharSequence[] items = p.toArray(new CharSequence[p.size()]);
                    AlertDialog.Builder builder = new AlertDialog.Builder(newContact.this);
                    builder.setItems(items, new DialogInterface.OnClickListener() {
                        public void onClick(DialogInterface dialog, int item) {
                            phoneNumber = (String) items[item];
                            showContentSettings();
                        }
                    });
                    AlertDialog alert = builder.create();
                    alert.show();
                }else {
                    phones.moveToFirst();
                    phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    showContentSettings();
                }
                phones.close();
            }else {
                showDialog(DIALOG_PHONE_NOT_FOUND);
            }
        }
        cursor.close();
        Log.d(TAG,"name: " + name + "\nphoneNumber: " + phoneNumber);
...