无法使用Intent.ACTION_PICK获取联系人

时间:2014-08-27 10:59:36

标签: android android-intent android-contacts

我正在尝试从联系人列表中获取联系人但由于某种原因我无法得到它。我有一些指南。这是我的代码:

public boolean onOptionsItemSelected(MenuItem item) {
   switch (item.getItemId()) {
      case R.id.menu_ice_add:
          Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
          startActivityForResult(intent, RequestCodes.PICK_CONTACT);
          return true;          
      default:
         return super.onOptionsItemSelected(item);
   }
}

当我调试时,它总是进入默认情况,它返回super.onOptionItemSelected(item);

@SuppressLint("InlinedApi")
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

    // se comprueba de qué activity está volviendo
    switch(requestCode) {       
    case (RequestCodes.PICK_CONTACT) :
          if (resultCode == Activity.RESULT_OK) {
              Uri contactData = data.getData();

              ContactUtils.addContactInfo(getActivity(), contactData, adapter);

          }             
          break;
    }

    super.onActivityResult(requestCode, resultCode, data);
}

它永远不会从onActivityResult开始。

任何人都可以给我一个提示吗?我会很感激。谢谢。

编辑1

我必须说这个代码适用于Android 2.3,但它不适用于KitKat(那些是我拥有的设备)

编辑2

我在menifest中添加了android.permission.READ_CONTACTS

编辑3(求助)

问题不是意图。我正在使用Fragments而且我正在调用onActivityResult,但我不知道我必须在我的Fragment附加的活动上执行“super.onActivityResult(arg0,arg1,arg2)”。

我不会删除这个问题,因为这可能会有所帮助。

无论如何,对所有人来说都是好事。

1 个答案:

答案 0 :(得分:0)

  

当我调试时,它总是进入默认情况,它返回super.onOptionItemSelected(item);

然后,您的case声明中包含错误的商品ID,或者您的R类与您的资源不同步(清理项目,例如Project> Eclipse中清理,以清除那个问题)。

  

它永远不会从onActivityResult开始。

这是因为您没有致电startActivityForResult(),原因是您的菜单资源和onOptionsItemSelected()实施问题,如上所述。

另请注意,您的代码中显示的用途不需要READ_CONTACTS,但您可能需要ContactUtils.addContactInfo()中的任何内容。

FWIW,this directory包含五个示例项目,所有项目都成功使用ACTION_PICK ContactsContracts.Contacts.CONTENT_URI。项目之间的差异归结为它们如何处理配置更改(例如,屏幕旋转)。