从android中的联系人检索照片和名称

App*_*tus 4 android contacts

使用我目前的代码,我只得到联系电话.但我想得到contact's name and contact's photo path.通过谷歌搜索尝试了很多代码,但我无法完成它.试过这个,但得到了FileNotFoundException.有人可以通过在下面的代码中添加代码片段来帮助我实现这一目标吗?

public void getContact(View view)
{

         Intent intent = new Intent(Intent.ACTION_PICK);
         intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
         startActivityForResult(intent, 1); 

}

protected void onActivityResult(int requestCode, int resultCode,Intent data)
    {
        super.onActivityResult(requestCode, resultCode, data);

             if(resultCode==RESULT_OK && requestCode == 1)
        {
            if (data != null) {
                Uri uri = data.getData();

                if (uri != null) {
                    Cursor c = null;
                    try {
                        c = getContentResolver().query(uri, new String[]{ 
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,  
                                    ContactsContract.CommonDataKinds.Phone.TYPE },
                                null, null, null);

                        if (c != null && c.moveToFirst()) {
                            String phoneNumber = c.getString(0);
                            int type = c.getInt(1);      
                        }
                    } finally {
                        if (c != null) {
                            c.close();
                        }
                    }
                }
            }
        }
         }
Run Code Online (Sandbox Code Playgroud)

Asi*_*eba 8

此代码遍历所有联系人,并将其名字,姓氏和照片作为位图获取:

Cursor cursor = App
            .getInstance()
            .getContentResolver()
            .query(ContactsContract.Contacts.CONTENT_URI, null, null, null,
                    null);

    if (cursor != null && cursor.getCount() > 0) {
        while (cursor.moveToNext()) {
            long id = cursor.getLong(cursor.getColumnIndex(ContactsContract.Contacts._ID));

            // get firstName & lastName
            Cursor nameCur = App.getInstance().getContentResolver()
                    .query(ContactsContract.Data.CONTENT_URI,
                            null,
                            ContactsContract.Data.MIMETYPE
                                    + " = ? AND "
                                    + StructuredName.CONTACT_ID
                                    + " = ?",
                            new String[] {
                                    StructuredName.CONTENT_ITEM_TYPE,
                                    Long.valueOf(id).toString() }, null);
            if (nameCur != null) {
                if (nameCur.moveToFirst()) {

                    String displayName = nameCur.getString(nameCur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    if (displayName == null) displayName = "";

                    String firstName  = nameCur.getString(nameCur.getColumnIndex(StructuredName.GIVEN_NAME));
                    if (firstName == null) firstName = "";
                    Log.d("--> ", firstName.length()>0?firstName:displayName);

                    String middleName = nameCur.getString(nameCur.getColumnIndex(StructuredName.MIDDLE_NAME));
                    if (middleName == null) middleName = "";

                    String lastName = nameCur.getString(nameCur.getColumnIndex(StructuredName.FAMILY_NAME));
                    if (lastName == null) lastName = "";

                    lastName = middleName + (middleName.length()>0?" ":"") + lastName;

                    Log.d("--> ", lastName);
                }
                nameCur.close();
            }

            Bitmap photo = null;

            try {
                InputStream inputStream = ContactsContract.Contacts.openContactPhotoInputStream(App.getContext().getContentResolver(),
                        ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.valueOf(id)));

                if (inputStream != null) {
                    photo = BitmapFactory.decodeStream(inputStream);
                }

                if (inputStream != null) inputStream.close();

            } catch (IOException e) {
                e.printStackTrace();
            }

            Log.d("--> ", photo);
        }
    }

    if (cursor != null) { cursor.close(); }
Run Code Online (Sandbox Code Playgroud)

您还需要此权限: <uses-permission android:name="android.permission.READ_CONTACTS" />

希望有所帮助!