如何在Android中启动目录联系人的联系人详细信息活动

时间:2018-08-13 09:42:47

标签: contacts android-contacts contactscontract

我正在尝试启动具有联系人ID的目录联系人(某些组织联系人)的详细信息页面。对于本地联系人,它工作正常,但对于组织联系人,则无效。

这是我的代码。 (姓名是联系人姓名,idstr是目录ID)

lookupByName = ContactsContract.Contacts.CONTENT_FILTER_URI.buildUpon().appendEncodedPath(name)
                        .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, idStr).build();


            mCursor = mContext.getContentResolver().query(lookupByName, new String[]{ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.PhoneLookup._ID}, null, null, null);


            if (mCursor.moveToFirst()) {
                idPhone = 
                Long.valueOf(mCursor.getString(
            mCursor.getColumnIndex(ContactsContract.PhoneLookup._ID)));        
           }
   Intent intent = new Intent(Intent.ACTION_VIEW);                    
   intent.setData(ContentUris.
       withAppendedId(ContactsContract.Contacts.CONTENT_URI, idPhone ));        
  startActivity(intent);

请帮助我。

谢谢。

1 个答案:

答案 0 :(得分:0)

这很棘手,但是设法使其起作用 您需要获取联系人的LOOKUP_KEY,从中建立一个LookupUri,将DIRECTORY_PARAM_KEY附加到LookupUri,然后将其放在意图的setData中。 / p>

String name = "hello";
String directoryId = "5"

Uri uri = Contacts.CONTENT_FILTER_URI.buildUpon().appendPath(name).appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId).build();
String[] projection = new String[]{Contacts._ID, Contacts.DISPLAY_NAME, Contacts.LOOKUP_KEY};
Cursor cur = getContentResolver().query(uri, projection, null, null, null);
DatabaseUtils.dumpCursor(cur); // debug

// add some safety checks first obviously...
cur.moveToFirst();
String lookup = cur.getString(2);
Uri lookupUri = Contacts.getLookupUri(cur.getLong(0), lookup).buildUpon().appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, directoryId).build();

Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(lookupUri);
startActivity(intent);