Android выбрать адрес электронной почты - PullRequest
8 голосов
/ 02 мая 2011

Я бы хотел выбрать электронное письмо из списка контактов.Выбор контакта недостаточно хорош, поскольку у контакта может быть несколько электронных писем.

С помощью демонстрации API мне удалось выбрать контакт, номер телефона и даже адрес.Пример:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE);
// OR
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
// OR
intent.setType(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE);

НО, при попытке выбрать электронное письмо

intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE);

Я получаю исключение активности не найдено.

Любая идея о том, как выбрать электронное письмо изписьма всех контактов?

Спасибо.Алик.

Обновление (2011/05/02): Найден другой способ выбора вещей из контактов, но средство выбора электронной почты еще не зарегистрировано в намерении.

Работает:

new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI);
new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI);

НЕ работает:

new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.Email.CONTENT_URI);

Ответы [ 5 ]

1 голос
/ 30 октября 2013

вы должны использовать следующую константу (не CONTENT_ITEM_TYPE):

intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
1 голос
/ 25 октября 2011

Я специально не пытался использовать средство выбора, но мы перебираем наш кэш контактов и находим все контактные данные с типом MIME Email.CONTENT_ITEM_TYPE.

Затем мы создаем диалогпозвольте пользователю выбрать, какой адрес электронной почты он хочет использовать, и мы передаем этот адрес электронной почты в приложение электронной почты пользователя, например,

  final Intent emailIntent = new Intent(Intent.ACTION_SEND);
  emailIntent.putExtra(Intent.EXTRA_STREAM, "Some text");

  Builder builder = new Builder(this);
  builder.setTitle("Choose email");
  builder.setItems(emailAddressesArray, new DialogInterface.OnClickListener()
  {
    @Override
    public void onClick(DialogInterface dialog, int which)
    {
      String address = emailAddresses.get(emailAddressesArray[which]);
      sLog.user("User selected e-mail: " + address);
      emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[]{address});
      startExternalActivity(emailIntent);
    }
  });
  builder.show();
0 голосов
/ 01 мая 2015

Отлично работает:

 Intent intent = new Intent(Intent.ACTION_PICK);
 intent.setType(ContactsContract.CommonDataKinds.Email.CONTENT_TYPE);
 startActivityForResult(intent, 1);

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 1) {
            if (resultCode == Activity.RESULT_OK) {
                Uri contactData = data.getData();
                Cursor cursor = getActivity().managedQuery(contactData, null, null, null, null);
                cursor.moveToFirst();
                String email = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
                editText.setText(email);
            }


        }
}
0 голосов
/ 14 августа 2014

Старая ветка, но ... эта информация может кому-то пригодиться.Когда вы запускаете намерение с Intent.ACTION_PICK, вы пытаетесь вызвать действие «Выбор контактов», которое обычно предоставляется приложением «Контакты / телефонная книга».

В последней версии приложения контактов vanilla (Google) (Android 4.4.4) в фильтре намерений есть Email.CONTENT_ITEM_TYPE для mimetype, поэтому оно должно реагировать на такое намерение, как и вы.Я не уверен, но кажется, что у Сборщика контактов для более старых версий (ICS, JB) не было этого в его фильтрах намерений.

Короче говоря, это намерение должно работать на KK с установленными ванильными контактами и не должно работать на более старых версиях Android.

0 голосов
/ 22 декабря 2011

Вот пример кода, чтобы отобразить пользователю все адреса электронной почты в списке контактов и позволить им выбрать один (который затем помещается в EditText с идентификатором R.id. youredittextid ).

Примечание: Это довольно неэффективный способ сделать это и приведет к большой задержке, если у вас много контактов. Но весь необходимый код здесь; настроить, как считаете нужным ...

        // We're going to make up an array of email addresses
        final ArrayList<HashMap<String, String>> addresses = new ArrayList<HashMap<String, String>>();

        // Step through every contact
        final ContentResolver cr = getContentResolver();
        final Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        while (cursor.moveToNext())
        {
            final String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            final String contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            // Pull out every email address for this particular contact
            final Cursor emails = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
                                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null);
            while (emails.moveToNext()) 
            {
                // Add email address to our array
                final String strEmail = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));

                final HashMap<String, String> email = new HashMap<String, String>();
                email.put("Name", contactName);
                email.put("Email", strEmail);

                addresses.add(email);
            }
            emails.close();
        }

        // Make an adapter to display the list
        SimpleAdapter adapter = new SimpleAdapter(this, addresses, android.R.layout.two_line_list_item,
                                                    new String[] { "Name", "Email" },
                                                    new int[] { android.R.id.text1, android.R.id.text2 });

        // Show the list and let the user pick an email address
        new AlertDialog.Builder(this)
          .setTitle("Select Recipient")
          .setAdapter(adapter, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

                EditText e = (EditText)findViewById(R.id.youredittextid);
                HashMap<String, String> email = addresses.get(which);
                e.setText(email.get("Email"));

              dialog.dismiss();
            }
          }).create().show(); 
...