2011-04-22 162 views
4

现在,我可以检索电话号码并将我的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); 

       } 

      } 
     } 
+0

有什么问题?什么不工作? – Michael 2011-04-22 06:44:48

+0

对于任何想单独使用姓氏和名字的人,请参阅:http://stackoverflow.com/questions/4301064/how-to-get-the-firstname-and-lastname-from-android-contacts Krzysztof的答案对于我。 – 2011-10-27 18:45:21

回答

6

这是怎么弄到的显示名称...

@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) { } 
     } 
    } 
} 

希望它能帮助:)

+0

谢谢!我怎么能得到姓氏?或名字? – LuxuryMode 2011-04-22 13:20:03

+0

这将得到名字和姓氏 – 2011-04-22 13:27:04

+0

但我需要单独的名字和姓氏。 ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME和ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME应该可以工作,但这就是我遇到的问题。 – LuxuryMode 2011-04-22 14:04:19

1

如果您有接触式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; 
相关问题