2016-06-23 11 views
0

私はコンタクトピッカーの意図を使用しました。私はその意図を通して接触のデータを得ています。その意図によって、私は連絡先の人物の名前を取得しています。連絡先からメールや姓を受け取る方法は?

連絡先の電子メールIDを取得しようとしたとき、電子メールIDではなく連絡先の番号のみが表示されます。最後の連絡先にも設定されていますが、連絡先の姓の場合は常にnullと表示されます。

コード:

private void contactPicked(Intent data) { 
    Cursor cursor = null; 
    try { 
     String phoneNo = null ; 
     String name = null; 
     // getData() method will have the Content Uri of the selected contact 
     Uri uri = data.getData(); 
     //Query the content uri 
     cursor = getContentResolver().query(uri, null, null, null, null); 
     cursor.moveToFirst(); 
     // column index of the phone number 
     int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
     // column index of the contact name 
     int nameIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME); 

     int contactIdIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID); 

     int emailIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA); 

     int lastNameIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME); 


     mOrganizerPhone = cursor.getString(phoneIndex); 
     mOraganizerName = cursor.getString(nameIndex); 
     mOrganizersId = cursor.getString(contactIdIndex); 
     mOrganizersEmail = cursor.getString(emailIndex); 
     mOrganizersLastName = cursor.getString(lastNameIndex); 


    Toast.makeText(PlanEventActivity.this,name+" "+phoneNo,Toast.LENGTH_SHORT).show(); 


    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

はありがとう..

+1

私は、これは便利だと思いますあなたのために:http://stackoverflow.com/questions/12109391/getting-name-and-email-from-contact-list-is-very-slow – alway5dotcom

+0

私は使用するクエリを教えてくださいできますか?私が検索したとき、私は電子メールと構造化された姓を取得するための別のクエリを参照してください。各IDの@HuyN – Sid

答えて

0

"ID" で、あなたはこのような電子メールアドレスを取得することができ、これは一例です:

public class CustomerForm extends Activity { 
private final static int CONTACT_PICKER = 1; 
private EditText txtMailContacto; 
private EditText txtNombreContacto; 
private EditText txtTelefono; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_customer_form); 
    txtMailContacto = (EditText) findViewById(R.id.txtMailContacto); 
    txtTelefono = (EditText) findViewById(R.id.txtTelefono); 
    txtNombreContacto = (EditText) findViewById(R.id.txtNombreContacto); 
} 
public void pickContact(View v) 
{ 
    Intent contactPickerIntent = 
      new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    startActivityForResult(contactPickerIntent, CONTACT_PICKER); 
} 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // check whether the result is ok 
    if (resultCode == RESULT_OK) { 
     // Check for the request code, we might be using multiple startActivityForReslut 
     switch (requestCode) { 
     case CONTACT_PICKER: 
      contactPicked(data); 
      break; 
     } 
    } else { 
     Log.e("MainActivity", "Failed to pick contact"); 
    } 
} 
private void contactPicked(Intent data) { 
    ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
    cur.moveToFirst(); 
    try { 
     // getData() method will have the Content Uri of the selected contact 
     Uri uri = data.getData(); 
     //Query the content uri 
     cur = getContentResolver().query(uri, null, null, null, null); 
     cur.moveToFirst(); 
               // column index of the contact ID 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
               // column index of the contact name 
     String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     txtNombreContacto.setText(name);  //print data    
               // column index of the phone number 
     Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", 
        new String[]{id}, null); 
        while (pCur.moveToNext()) { 
         String phone = pCur.getString(
           pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
         txtTelefono.setText(phone);   //print data 
        } 
        pCur.close(); 
               // column index of the email 
     Cursor emailCur = cr.query(  
       ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
       null, 
       ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
       new String[]{id}, null); 
      while (emailCur.moveToNext()) { 
       // This would allow you get several email addresses 
        // if the email addresses were stored in an array 
       String email = emailCur.getString(
           emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS));           
       txtMailContacto.setText(email);   //print data 
     } 
     emailCur.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
} 
+0

私は電子メールのカーソルを作成する必要がありますか?姓はどうですか? @Huy N – Sid

+0

そうですよ! 姓については、上記の "ContactsContract.Contacts.DISPLAY_NAME"を使用し、フルネームを取得しています。希望の名前を取得するためにJavaでspitメソッドを使用できます:) – alway5dotcom

+0

電子メールIDを取得しないこのソリューションを試しました。 @Huy N – Sid

関連する問題