Android 联系人选取器,检索姓、名、电话号码

Android 联系人选取器,检索姓、名、电话号码,android,Android,现在,我可以检索电话号码并将我的editText文本设置为该号码。但是,当我试图得到姓氏或名字时,它不起作用。注意我注释掉的东西 这是我的密码: import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsCon

现在,我可以检索电话号码并将我的editText文本设置为该号码。但是,当我试图得到姓氏或名字时,它不起作用。注意我注释掉的东西

这是我的密码:

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class main extends Activity {

    private static final int CONTACT_PICKER_RESULT = 1001; 
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button getContacts = (Button)findViewById(R.id.getContacts);
        getContacts.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_PICK,
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
                startActivityForResult(i, CONTACT_PICKER_RESULT);

            }
        });
    }
    protected void onActivityResult(int reqCode, int resultCode, Intent data) {
        super.onActivityResult(reqCode, resultCode, data);
        if(resultCode == RESULT_OK) {
            switch (reqCode) {
            case CONTACT_PICKER_RESULT:
                Cursor cursor = null;
                String number = "";
                String lastName ="";
                try {

                    Uri result = data.getData();

                    //get the id from the uri
                    String id = result.getLastPathSegment();  

                    //query
                    cursor = getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            null,
                            ContactsContract.CommonDataKinds.Phone._ID + " = ? " , new String[] {id}, null);

//                  cursor = getContentResolver().query(Phone.CONTENT_URI,
//                          null, Phone.CONTACT_ID + "=?", new String[] { id },
//                          null);

                    int numberIdx = cursor.getColumnIndex(Phone.DATA);  

                    if(cursor.moveToFirst()) {
                        number = cursor.getString(numberIdx);
                        //lastName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME));
                    } else {
                        //WE FAILED
                    }
                } catch (Exception e) {
                    //failed
                } finally {
                    if (cursor!=null) {
                        cursor.close();
                    }
                    EditText numberEditText = (EditText)findViewById(R.id.number);
                    numberEditText.setText(number);
                    //EditText lastNameEditText = (EditText)findViewById(R.id.last_name);
                    //lastNameEditText.setText(lastName);

                }

            }
        }

这就是我如何得到显示名称

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == RESULT_OK) {
        switch (requestCode) {
        case CONTACT_PICKER_RESULT:
            Cursor cursor = null;

            try {
                Uri result = data.getData();
                String id = result.getLastPathSegment();

                //Get Name
                cursor = getContentResolver().query(result, null, null, null, null);
                if (cursor.moveToFirst()) {
                    name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                } catch (Exception e) { }
        }
    }
}

希望有帮助:)

如果您有联系人id,可以使用此方法检索所有其他联系人数据:

Map<String, String> result = new HashMap<>();
Cursor cursor = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + "='" + YOUR_CONTACT_ID + "'", null, null);
if (cursor != null) {
    while (cursor.moveToNext()) {
        String mime = cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
        switch (mime) {
            case ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE:
                result.put(FIRST_NAME, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME)));
                result.put(LAST_NAME, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME)));
                break;
            case ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE:
                result.put(CITY, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)));
                result.put(STREET, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)));
                result.put(ZIP, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)));
                break;
            case ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE:
                if (ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE == cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE))) {
                    result.put(MOBILE, cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                }
                break;
        }
    }
    cursor.close();
}
return result;
Map result=newhashmap();
Cursor Cursor=context.getContentResolver().query(ContactsContract.Data.CONTENT\u URI,null,ContactsContract.Data.CONTACT\u ID+“=”+您的\u CONTACT\u ID+”,null,null);
如果(光标!=null){
while(cursor.moveToNext()){
字符串mime=cursor.getString(cursor.getColumnIndex(ContactsContract.Data.MIMETYPE));
交换机(mime){
案例联系人contract.CommonDataTypes.StructuredName.CONTENT\u ITEM\u类型:
put(FIRST_NAME,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.StructuredName.GIVEN_NAME));
put(姓氏,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.StructuredName.FAMILY_NAME));
打破
案例联系人contract.CommonDataTypes.StructuredPostal.CONTENT\u ITEM\u类型:
put(CITY,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.StructuredPostal.CITY));
put(STREET,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.StructuredPostal.STREET));
put(ZIP,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.StructuredPostal.POSTCODE));
打破
案例联系人contract.commonDataTypes.Phone.CONTENT\u ITEM\u类型:
if(ContactsContract.commondatatypes.Phone.TYPE_MOBILE==cursor.getInt(cursor.getColumnIndex(ContactsContract.commondatatypes.Phone.TYPE))){
put(MOBILE,cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.Phone.NUMBER));
}
打破
}
}
cursor.close();
}
返回结果;

有什么问题吗?到底是什么不起作用?对于那些想分别说出名字和姓氏的人,请看:Krzysztof的回答对我特别有用。谢谢!我怎么知道你的姓?或者名字?这可以得到名字和姓氏,但我需要分别知道名字和姓氏。ContactsContact.CommonDataTypes.StructuredName.FAMILY_NAME和ContactsContact.CommonDataTypes.StructuredName.GIVEN_NAME应该可以工作,但这正是我遇到的问题。将其拆分为一个空格“”,然后将splitString[0]作为名字,将splitString[1]作为姓氏?这对我有帮助: