Вопрос по android, email – Доступ к контактам и получить адрес электронной почты

6

У меня есть фрагмент кода для доступа к контактам. Когда пользователь нажимает кнопку, тогда открывается список контактов, и пользователь может выбирать человека из контактов, и адрес электронной почты этого человека должен быть записан в тексте редактирования. Я могу получить письмо от людей, которых выбирает пользователь. Но я не могу установить его для текста редактирования.

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

Ваш Ответ

3   ответа
3

что у вашего приложения есть разрешение, иначе вы получите странные исключения

в AndroidManifest.xml:

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

о контакта -

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 это кликButton Используйте код там, где вы хотите.

Я уверен, что в какой-то момент это был отличный ответ. Контакты ограничены на уровне API 8. ActivityNotFoundException в API 17.
+1, хороший ответ
Я работаю отлично .. если я выберу контакт, который обладает адресом электронной почты, в противном случае приложение будет зависать, черный экран и ничего не произойдет. Я пользуюсь HTC lolipop
отлично................
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());
                }
        }

Похожие вопросы