2011-12-21 5 views
15

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

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

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?

+0

У меня такая же проблема :( –

+0

http://stackoverflow.com/questions/9551821/android-4-0-3-and-finish-activity Я имею подобный вопрос. – user1247617

+0

мой проблема заключается в том, что если я открываю другое действие и возвращусь к родительской активности onActivityResult(), но когда я попытаюсь захватить изображение, используя намерение onActivityResult(), которое вызывается до того, как я захватил или отменил событие камеры, и эта проблема возникает в android 4.03 (тестирование на htc me) –

ответ

15

Для Android 4.0.3 и выше, вам необходимо предоставить новый пристальный дополнительно:

общественности статической конечной строки INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED = "finishActivityOnSaveCompleted";

aim.putExtra (INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);

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

Кто-нибудь?

+1

Это здорово! Спасибо, много. Я просто попробовал это на Galaxy Nexus, работающем 4.0.4, и это сработало как шарм! Глупый Verizon Galaxy Nexus все еще застрял на 4.0.2, t, но, надеюсь, Verizon скоро это обновит. Еще раз спасибо! –

+1

Спасло мне много головных болей, спасибо! Оказывается, это задокументировано, хотя найти, где искать в документах Android, конечно, есть собственная головная боль. http://developer.android.com/training/contacts-provider/modify-data.html в «Добавить флаг навигации» – Groxx

+0

Это не работает на Android 4.4.2. Пожалуйста, поделитесь, если у вас есть решение или знаете, что изменилось. Thx – Sandra