android - 如何从 ContactsContract.Contacts 获取联系人的 LOOKUP_KEY?

标签 android android-intent android-contentprovider contactscontract

我必须从 Android 设备的联系人列表中选择一个联系人。

使用以下代码,我检索了一个包含设备上联系人列表的 Activity :

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, ADD_CONTACT_REQUEST_CODE);

选中联系人后,如何获取选中联系人的LOOKUP_KEY?

或者检索 content://com.android.contacts/contacts/lookup/0r2-334B29432‌ D314D2D29/2,我需要获取 0r2-334B29432‌ D314D2D29,即 LOOKUP_KEY

到目前为止,我只能检索完整的 Uri

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  super.onActivityResult(requestCode, resultCode, data);
  if(resultCode == Activity.RESULT_OK){
      switch (requestCode){
          case ADD_CONTACT_REQUEST_CODE:
             Uri contactUri = data.getData();
             String contactUriString = contactUri.toString();
             break;
      }
   }
}

提前谢谢你

最佳答案

为此有一个简单的 API 辅助方法 - getLookupUri :

Uri contactUri = data.getData();
ContentResolver cr = getContentResolver();
Uri lookupUri = ContactsContract.Contacts.getLookupUri(cr, contactUri);

更新

要获取 LOOKUP_KEY,请执行以下操作:

String projection = String[] { Contacts.LOOKUP_KEY };
Cursor cursor = getContentResolver().query(contactUri, projection, null, null, null);

if (cursor != null && cursor.moveToNext()) {
  String lookupKey = cursor.getString(0);
  Log.d(TAG, "key = " + lookupKey);
  cursor.close();
}

关于android - 如何从 ContactsContract.Contacts 获取联系人的 LOOKUP_KEY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44457827/

相关文章:

java - Android - 使用另一个类的变量?

android - 任务 ':app:dexDebug'的执行失败| Gradle构建中的错误

android - 如何在 Android 应用程序中嵌入 C 程序

android - 删除过滤器文本后,CustomArrayAdapter 不会刷新

android - 这是 Activity 启动模式、 list 或 Intent 标志的更好方法

android - 使用 Intent.ACTION_GET_CONTENT 时如何避免 "SecurityException"

java - Android:通过Regex方法传递文本,并显示在EditText上

android - 如何管理 "No application can perform this action"(又名 ActivityNotFoundException)

android - ContentResolver 是如何定位到对应的 ContentProvider 的?

android - 插入失败时获取约束错误