Добавление намерения контакта не возвращает данные onActivityResult в ICS

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

Мой код основан на «Добавлении нового контакта» с этого сайта.

Intent intent = new Intent(Intent.ACTION_INSERT);
intent.setType(Contacts.CONTENT_TYPE);
intent.putExtra(ContactsContract.Intents.Insert.PHONE, number);
startActivityForResult(intent, PICK_CONTACT);

а потом

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Intent intent = new Intent(this, Foo.class);
    Uri uri = data.getData(); //I get nullpointer here on ICS
    intent.putExtra("contact", ContactAccessor.getInstance().loadContact(this, uri));
    startActivity(intent);
    finish();
}

Этот код отлично работает на Android 2.2 и 2.3. Он запускает приложение контактов и позволяет пользователю вводить такие данные, как имя и адрес электронной почты, а когда они закончат и нажимают «ОК», «Сохранить» или «что угодно», оно возвращается в мое приложение, и я могу прочитать то, что они ввели. Однако на Android 4.0 (ICS) он не возвращается обратно в мое приложение, когда пользователь завершает создание контакта. И когда я выхожу из представления контактов (через кнопку «Назад»), он не включает никаких намерений с контактной информацией.

Какое намерение я должен использовать, чтобы получить такое же поведение в ICS?


person getekha    schedule 21.12.2011    source источник
comment
stackoverflow.com/questions/9551821 / У меня похожая проблема.   -  person user1247617    schedule 25.03.2012
comment
моя проблема в том, что это работает, если я открываю другое действие и возвращаюсь к родительскому действию в onActivityResult(), но когда я пытаюсь захватить изображение, используя намерение onActivityResult(), вызываемое до того, как я захватываю или отменяю событие камеры. и эта проблема возникает в Android 4.03 (тестирование на htc me)   -  person Hiren Dabhi    schedule 25.09.2012


Ответы (1)


Для Android 4.0.3 и более поздних версий вам необходимо указать новое намерение:

общедоступная статическая финальная строка INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED = "finishActivityOnSaveCompleted";

намерение.putExtra (INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, правда);

У меня нет решения для Android 4.0–4.0.2.

Кто-нибудь?

person OferR    schedule 27.03.2012
comment
Отлично! Спасибо огромное. Я только что попробовал это на Galaxy Nexus с 4.0.4, и это сработало как шарм! Глупый Verizon Galaxy Nexus все еще застрял на 4.0.2, поэтому это исправление все еще не работает, но, надеюсь, Verizon скоро его обновит. Еще раз спасибо! - person Juan Gomez; 26.04.2012
comment
Спас меня от многих головных болей, спасибо! Оказывается, это задокументировано, хотя поиск того, где искать в документации по Android, конечно, является собственной головной болью. developer.android.com/training/contacts-provider/ в Добавить навигационный флаг - person Groxx; 06.04.2013
comment
Это не работает на Android 4.4.2. Пожалуйста, поделитесь, если у вас есть какое-либо решение или знаете, что изменилось. Спасибо - person Sandra; 16.09.2014
comment
@Sandra, это отлично работает на моем Nexus 5 и Samsung S5 с 4.4.2. Можете ли вы поделиться дополнительной информацией? - person OferR; 27.09.2014
comment
Я обнаружил, что он не работает на Sony Xpera Z, Z2 и LG G2 mini, все работают под управлением 4.4.2. Я задал вопрос здесь: stackoverflow.com/questions/25872408/ - person Sandra; 29.09.2014
comment
У меня нет ни одного из этих телефонов, поэтому я буду следить за этим пространством. Спасибо. - person OferR; 29.09.2014