代码之家  ›  专栏  ›  技术社区  ›  Shiva Krishna Kongara

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

  •  1
  • Shiva Krishna Kongara  · 技术社区  · 6 年前

    我正在尝试启动联系人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 回复  |  直到 6 年前
        1
  •  0
  •   marmor    6 年前

    这很棘手,但还是成功地让它工作了 LOOKUP_KEY ,生成 LookupUri 从中附加 DIRECTORY_PARAM_KEY 查找uri ,并将其放入 setData .

    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);