Android: Как начать контакты для электронной почты? - PullRequest
2 голосов
/ 13 мая 2011

это намерение открывает контакты, содержащие записи только с адресной информацией:

Intent getContactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI);

Теперь я пытался использовать этот шаблон для фильтрации контактов, содержащих электронную почту:

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

Но это исключение (нет action_pick для намерения или около того)

Как мне этого добиться?

Ответы [ 2 ]

3 голосов
/ 13 мая 2011

В настоящее время вы не можете использовать приложение «Контакты» по умолчанию: приложение «Контакты» по умолчанию регистрирует этот фильтр намерений (см. Строку 165 в https://android.googlesource.com/platform/packages/apps/Contacts/+/master/AndroidManifest.xml#165):

<intent-filter>
                 <action android:name="android.intent.action.PICK" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <data android:mimeType="vnd.android.cursor.dir/contact" />
                 <data android:mimeType="vnd.android.cursor.dir/person" />
                 <data android:mimeType="vnd.android.cursor.dir/phone_v2" />
                 <data android:mimeType="vnd.android.cursor.dir/phone" />
                 <data android:mimeType="vnd.android.cursor.dir/postal-address_v2" />
                 <data android:mimeType="vnd.android.cursor.dir/postal-address" />
             </intent-filter>

Таким образом, он может отвечать на почтовый адрес ACTION_PICK намерений, но не на адрес электронной почты ACTION_PICK намерений.

Если вы хотите выбрать адрес электронной почты, вам нужно создать свою собственную активность, которая получает курсор от поставщика контактов, который отображает только пользователей с адресами электронной почты и показывает, что в ListView для выбора пользователя.

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

Попробуйте это:

      public void readcontact(){
            try {
                Intent intent = new Intent(Intent.ACTION_PICK,  ContactsContract.Contacts.CONTENT_URI);
                intent.setType("vnd.android.cursor.dir/email");
                startActivityForResult(intent, PICK_CONTACT);
            } catch (Exception e) {
                    e.printStackTrace();
              }
        }
...