2012-05-15 25 views
6

Tengo un código snappet para acceder a Contactos. Cuando el usuario hace clic en el botón, la lista de contactos se abrirá y el usuario puede elegir a una persona entre los contactos y la dirección de correo electrónico de la persona debe escribirse en un texto de edición. Puedo recibir el correo electrónico de las personas que el usuario seleccione. Pero no puedo configurarlo para el texto de edición.Acceder a contactos y obtener la dirección de correo electrónico

static String email = ""; 


imgbtnaddfromcontacts.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (v == imgbtnaddfromcontacts) { 
        try 
        { 
         Intent intent = new Intent(Intent.ACTION_PICK, 
           ContactsContract.Contacts.CONTENT_URI); 
         startActivityForResult(intent, 1); 

        } catch (Exception e) { 
         e.printStackTrace(); 
         Log.e("Error in intent : ", e.toString()); 
        } 
       } 
      } 
     }); 
     kimeTxt.setText(email); 
    } 

    @Override 
    public void onActivityResult(int reqCode, int resultCode, Intent data) { 
     super.onActivityResult(reqCode, resultCode, data); 

     try { 
      if (resultCode == Activity.RESULT_OK) { 
       // Get data 
       Uri contactData = data.getData(); 
       // Cursor 
       Cursor cur = managedQuery(contactData, null, null, null, null); 
       ContentResolver contect_resolver = getContentResolver(); 

       // List 
       if (cur.moveToFirst()) { 
        String id = cur 
          .getString(cur 
            .getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

        Cursor phoneCur = contect_resolver.query(
          ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
            + " = ?", new String[] { id }, null); 

        Cursor emailCur = contect_resolver.query(
          ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
          null, 
          ContactsContract.CommonDataKinds.Email.CONTACT_ID 
            + " = ?", new String[] { id }, null); 

        if (phoneCur.moveToFirst()) { 
         name = phoneCur 
           .getString(phoneCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
         no = phoneCur 
           .getString(phoneCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

        } 

        while (emailCur.moveToNext()) { 
         // This would allow you get several email addresses 
         // if the email addresses were stored in an array 
         email = emailCur 
           .getString(emailCur 
             .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

         if (email != null) 
         { 
          seciliEmail = email; 
         } else { 
          Toast.makeText(EpostaIletActivity.this, 
            "Kişinin eposta hesabı bulunmamaktadır.", 
            Toast.LENGTH_SHORT); 
          Log.w("Error: ", "Kişinin eposta hesabı yok."); 
         } 
        } 

        Log.e("Phone no & name & email :***: ", name + " : " + no + ":" + email); 
        // txt.append(name + " : " + no + "\n"); 

        id = null; 
        name = null; 
        no = null; 
        seciliEmail = "xxx"; 
        phoneCur = null; 
        emailCur.close(); 
       } 
       contect_resolver = null; 
       cur = null; 
       // populateContacts(); 

      } 
     } catch (IllegalArgumentException e) { 
      e.printStackTrace(); 
      Log.e("IllegalArgumentException :: ", e.toString()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
      Log.e("Error :: ", e.toString()); 
     } 
    } 

Respuesta

21

Am mediante el siguiente código para obtener la dirección de correo electrónico del contacto seleccionado -

public void doLaunchContactPicker(View view) { 
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI); 
    startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (resultCode == RESULT_OK) { 
     switch (requestCode) 
     { 
     case CONTACT_PICKER_RESULT: 
      Cursor cursor = null; 
      String email = "", name = ""; 
      try { 
       Uri result = data.getData(); 
       Log.v(DEBUG_TAG, "Got a contact result: " + result.toString()); 

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

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

       int nameId = cursor.getColumnIndex(Contacts.DISPLAY_NAME); 

       int emailIdx = cursor.getColumnIndex(Email.DATA); 

       // let's just get the first email 
       if (cursor.moveToFirst()) { 
        email = cursor.getString(emailIdx); 
        name = cursor.getString(nameId); 
        Log.v(DEBUG_TAG, "Got email: " + email); 
       } else { 
        Log.w(DEBUG_TAG, "No results"); 
       } 
      } catch (Exception e) { 
       Log.e(DEBUG_TAG, "Failed to get email data", e); 
      } finally { 
       if (cursor != null) { 
        cursor.close(); 
       } 
       EditText emailEntry = (EditText) findViewById(R.id.editTextv); 
       EditText personEntry = (EditText) findViewById(R.id.person); 
       emailEntry.setText(email); 
       personEntry.setText(name); 
       if (email.length() == 0 && name.length() == 0) 
       { 
        Toast.makeText(this, "No Email for Selected Contact",Toast.LENGTH_LONG).show(); 
       } 
      } 
      break; 
     } 

    } else { 
     Log.w(DEBUG_TAG, "Warning: activity result not ok"); 
    } 
} 

doLaunchContactPicker es un onclick de Button uso del código donde quiera que quiere.

+1

+1, respuesta Niza – Venky

+2

Estoy seguro de que esto era una gran respuesta en un punto. Contactos está privado de API nivel 8. ActivityNotFoundException en API 17. – stephen

+0

excelente ................ – kgandroid

0
You can achieve it like this  

    public class Abc extends Activity{ 
     EditText kimeTxt; 
      Intent i;         
       Bundle b ;  
      @Override 

      protected void onCreate(Bundle savedInstanceState) { 
       // TODO Auto-generated method stub 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.add_course); 
     kimeTxt= (EditText)findViewById(R.id.emailid); 

     } 


     @Override 
      public void onActivityResult(int reqCode, int resultCode, Intent data) { 
       super.onActivityResult(reqCode, resultCode, data); 

       try { 
        if (resultCode == Activity.RESULT_OK) { 
         // Get data 
         Uri contactData = data.getData(); 
         // Cursor 
         Cursor cur = managedQuery(contactData, null, null, null, null); 
         ContentResolver contect_resolver = getContentResolver(); 

         // List 
         if (cur.moveToFirst()) { 
          String id = cur 
            .getString(cur 
              .getColumnIndexOrThrow(ContactsContract.Contacts._ID)); 

          Cursor phoneCur = contect_resolver.query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
              + " = ?", new String[] { id }, null); 

          Cursor emailCur = contect_resolver.query(
            ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
            null, 
            ContactsContract.CommonDataKinds.Email.CONTACT_ID 
              + " = ?", new String[] { id }, null); 

          if (phoneCur.moveToFirst()) { 
           name = phoneCur 
             .getString(phoneCur 
               .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
           no = phoneCur 
             .getString(phoneCur 
               .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

          } 

          while (emailCur.moveToNext()) { 
           // This would allow you get several email addresses 
           // if the email addresses were stored in an array 
           email = emailCur 
             .getString(emailCur 
               .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 

           if (email != null) 
           { 
            seciliEmail = email; 
           } else { 
            Toast.makeText(EpostaIletActivity.this, 
              "Kişinin eposta hesabı bulunmamaktadır.", 
              Toast.LENGTH_SHORT); 
            Log.w("Error: ", "Kişinin eposta hesabı yok."); 
           } 
          } 

          Log.e("Phone no & name & email :***: ", name + " : " + no + ":" + email); 
          // txt.append(name + " : " + no + "\n"); 

          id = null; 
          name = null; 
          no = null; 
          seciliEmail = "xxx"; 
          phoneCur = null; 
          emailCur.close(); 
         } 


    // can set email id here 



     kimeTxt.setText(email); 


         contect_resolver = null; 
         cur = null; 
         // populateContacts(); 

        } 
       } catch (IllegalArgumentException e) { 
        e.printStackTrace(); 
        Log.e("IllegalArgumentException :: ", e.toString()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        Log.e("Error :: ", e.toString()); 
       } 
     } 
3

asegurarse de que su aplicación tiene permiso, de lo contrario obtendrá extraños excepciones

en AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
Cuestiones relacionadas