2012-05-15 16 views
6

Mam snappet kodu dla dostępu do Kontaktów. Kiedy użytkownik kliknie przycisk, wówczas lista kontaktów będzie otwarta, a użytkownik może wybrać osobę z kontaktów, a adres e-mail osoby powinien zostać zapisany w edytorze tekstu. Mogę otrzymać wiadomość e-mail od osób wybranych przez użytkownika. Ale nie mogę ustawić go na edittext.dostęp do kontaktów i dostać adres email

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()); 
     } 
    } 

Odpowiedz

21

używam poniżej kod do uzyskania adresu e-mail od wybranego kontaktu -

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 jest onclick z Button użyć kodu gdziekolwiek chce.

+1

+1, miła odpowiedź – Venky

+2

Jestem pewien, że był to wspaniała odpowiedź w pewnym momencie. Kontakt jest depricated na poziomie API 8. ActivityNotFoundException API 17. – stephen

+0

doskonałą ................ – 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

upewnić się, że aplikacja ma zgody, inaczej dostaniesz dziwne wyjątki

w AndroidManifest.xml:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
Powiązane problemy