代码之家  ›  专栏  ›  技术社区  ›  Java_Waldi

如何在Android中通过ID打开联系人卡

  •  14
  • Java_Waldi  · 技术社区  · 14 年前

    是否可以通过联系人的ID打开android联系人卡?它和电话号码一起工作。下面是一个例子,如果我使用

    Intent i = new Intent();
    i.setAction(ContactsContract.Intents.SHOW_OR_CREATE_CONTACT);
    i.setData(Uri.fromParts("tel", "123456", null)); //<---- Change here from Phone to IDcontext.startActivity(i);
    

    但我想用身份证打开这张联系卡,例如,如果联系人的电话号码发生变化。

    3 回复  |  直到 8 年前
        1
  •  42
  •   Thorstenvv    14 年前

    使用ACTION_视图并使用联系人ID构建联系人URI,或者使用联系人查找URI(如果您已经拥有该URI,则为首选)。

        Intent intent = new Intent(Intent.ACTION_VIEW);
        Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactID));
        intent.setData(uri);
    context.startActivity(intent);
    
        2
  •  4
  •   Jean Hominal    14 年前

    您将使用以下URI:

    Uri.Builder newUriBuilder = ContactsContract.Contacts.CONTENT_LOOKUP_URI.buildUpon();
    newUriBuilder.appendPath("/").appendPath(theContactKey)
    i.setData(newUriBuilder.build());
    

    通过查看 API documentation for CONTENT_LOOKUP_URI .

        3
  •  2
  •   serg66    10 年前

    我试着用这里列出的方法打开一个联系人卡片,但是不知怎么的,联系人活动在打开之后马上就关闭了。

    联系人活动似乎不接受我的旧内容uri。

    我用 getLookupUri (long contactId, String lookupKey) 方法 ContactsContract.Contacts 类获取正确的内容uri https://developer.android.com/reference/android/provider/ContactsContract.Contacts.html#getLookupUri(long, java.lang.String)

    因此,打开联系人卡片的代码变为:

    Intent intent = new Intent(Intent.ACTION_VIEW);
    String lookupKey = phonesCursor.getString(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup.LOOKUP_KEY));
    long contactId = phonesCursor.getLong(phonesCursor.getColumnIndexOrThrow(ContactsContract.PhoneLookup._ID));
    Uri uri = ContactsContract.Contacts.getLookupUri(contactId, lookupKey);
    intent.setData(uri);
    startActivity(intent);