在ICS下,添加联系人意图不返回onActivityResult数据

16

我希望我的应用程序通过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)上,当用户完成创建联系人时它不会返回到我的应用程序。并且当我通过返回按钮退出联系人视图时,不包括任何带有联系人信息的intent。

我应该使用哪个intent来在ICS上获得相同的行为?


我遇到了类似的问题。 - user1247617
我的问题是,如果我打开另一个活动并在onActivityResult()返回到父活动,则它可以正常工作。但是当我尝试使用意图捕获图像时,onActivityResult()在我捕获或取消相机事件之前被调用。这个问题发生在Android 4.03上(在HTC ME上测试)。 - Hiren Dabhi
1个回答

17

对于 Android 4.0.3 及以上版本,您需要提供一个新的意图额外信息:

public static final String INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED = "finishActivityOnSaveCompleted";

intent.putExtra(INTENT_KEY_FINISH_ACTIVITY_ON_SAVE_COMPLETED, true);

我没有 Android 4.0 到 4.0.2 的解决方案。

有人可以帮忙吗?


1
太好了!非常感谢。我刚在运行4.0.4的Galaxy Nexus上尝试了一下,结果完美解决了问题!可恶的Verizon Galaxy Nexus仍然停留在4.0.2版本,所以这个修复方法还是不起作用,但希望Verizon能尽快更新。再次感谢! - Juan Gomez
2
节省了我很多麻烦,谢谢!结果发现这是有文档记录的,但在Android文档中找到它的位置当然也是一件头疼的事情。请参考http://developer.android.com/training/contacts-provider/modify-data.html中的“添加导航标志”部分。 - Groxx
这在 Android 4.4.2 上不起作用。如果您有任何解决方案或知道发生了什么变化,请分享。谢谢。 - Sandra
@Sandra,这在我的Nexus 5和Samsung S5上运行良好,它们都安装了4.4.2版本。你能分享更多信息吗? - OferR
我发现它在运行4.4.2的Sony Xpera Z、Z2和LG G2 mini上无法正常工作。我在这里提出了一个问题:http://stackoverflow.com/questions/25872408/incorrect-navigation-while-contact-saving-on-android-4-4-2 - Sandra
我没有这些手机中的任何一款,所以我会关注这个领域。谢谢。 - OferR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接