Как вызвать средство выбора контактов с главного экрана?

Я экспериментирую с созданием пользовательского домашнего экрана Android. Я использовал пример приложения Home Screen и адаптировал его. Что-то, что я хотел бы сделать, это открыть средство выбора контактов с помощью кнопки на главном экране и использовать контакт, который пользователь выбрал в следующем действии. Я столкнулся с той же проблемой, которая упоминается в этом вопросе.

Как я могу обойти это, чтобы домашний экран оставался «singleInstance», и я также мог вызывать startActivityForResult()?

Является ли сборщик контактов действием, которое я могу подклассировать (я искал, но не могу найти), чтобы я мог использовать решение, которое предлагает Дэвид Вассер в вышеупомянутом вопросе?


person Diana    schedule 12.08.2013    source источник


Ответы (1)


В конце концов, я нашел элегантное решение:

Моя основная активность запускает промежуточную, невидимую активность, которая имеет android:theme="@android:style/Theme.NoDisplay"

Это промежуточное действие вызывает средство выбора контактов в его onCreate

Intent phoneContactIntent = new Intent(Intent.ACTION_PICK, 
    ContactsContract.Contacts.CONTENT_URI);
// Show user only contacts w/ phone numbers
phoneContactIntent.setType(Phone.CONTENT_TYPE); 
startActivityForResult(phoneContactIntent, CHOOSE_CONTACT_TO_CALL);

Затем в onActivityResult создается новое намерение для основного приложения с данными, возвращенными средством выбора контактов.

    switch (requestCode) {
    case (CHOOSE_CONTACT_TO_CALL):
        if (resultCode == Activity.RESULT_OK) {
            Intent resultIntent = new Intent(this, Home.class);
            resultIntent.putExtras(data);

            Uri contactData = data.getData();
            if (contactData != null)
            {
                resultIntent.setData(contactData);
            }
            startActivity(resultIntent);
        }
    }
    finish();

и в моем классе Home в onCreate я вызываю getIntent() и проверяю данные в намерении, которое запустило основное действие.

person Diana    schedule 20.08.2013