Android 手机联系人仅包含照片、电话和姓名

Posted

技术标签:

【中文标题】Android 手机联系人仅包含照片、电话和姓名【英文标题】:Android Phone Contacts ONLY with Photo,Phone and Name 【发布时间】:2014-04-17 19:05:52 【问题描述】:

我正在使用以下光标来检索仅在手机中的联系人?但是,该代码为我提供了 SIM 卡和电话中的联系人。是否可以仅在电话中获取联系人,包括他们的照片(如果有)、电话号码和显示名称?

  cursor = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);

  int contactIdIdx = cursor.getColumnIndex(Phone._ID);                  
  int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME);                  
  int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER);                 
  int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_ID);  
  cursor.moveToFirst();

 do 

    try 

     Contact c = new Contact();

     String idContact = cursor.getString(contactIdIdx);
 String name = cursor.getString(nameIdx);
 c.setName(name);

Log.i(TAG,storage.getDriveName()+": "+name);
    String phoneNumber = cursor.getString(phoneNumberIdx);
    Log.i(TAG,storage.getDriveName()+": "+phoneNumber);
c.setPhoneNumber(phoneNumber);
if(phoneNumber != null)
   c.setPhotoUri(getPhotoUri(Long.valueOf(fetchContactIdFromPhoneNumber(phoneNumber))));

contacts.add(cbd);
    catch(Exception e) 
  Log.e(TAG,storage.getDriveName()+": "+e.getMessage());
 
 while (cursor.moveToNext());  
  catch (Exception e) 
   Log.e(TAG,storage.getDriveName()+": "+e.getMessage());

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

 

【问题讨论】:

【参考方案1】:

我已经实现了下面的代码对我有用,看看这个:

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI);
        // filters contact with phone numbers
        contactPickerIntent
                .setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE);
        startActivityForResult(contactPickerIntent, CONTACT_PICKER);

现在在活动结果中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    AndyUtills.removeSimpleProgressDialog();

    if (resultCode == RESULT_OK) 
        switch (requestCode) 
        case CONTACT_PICKER:
            Cursor cursor = null;
            Bitmap bitmap = null;

            Uri result = data.getData();
            // String id = result.getLastPathSegment();

            cursor = getContentResolver().query(result, null, null, null,
                    null);
            // String contactId=cursor.get;
            if (cursor == null) 

                AndyUtills.showToast("Selection Fail", this);
                return;
            
            if (!cursor.moveToFirst()) 

                cursor.close();
                AndyUtills.showToast("Selection Fail", this);
                return;
            
            String contactName = cursor
                    .getString(cursor
                            .getColumnIndex((ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)
                                    .toString().trim()));
            String contactNumber = cursor
                    .getString(cursor
                            .getColumnIndex((ContactsContract.CommonDataKinds.Phone.NUMBER)));

            // check for contact whether it is already inserted or not
            if (checkForSameNumber(contactNumber)) 
                AndyUtills.showToast("Same contact is already inserted",
                        this);
                return;
            
            String photo = null;

            // get photo uri from contacts
            try 

                photo = cursor
                        .getString(cursor
                                .getColumnIndex(ContactsContract.CommonDataKinds.Contactables.PHOTO_URI));
                Log.i("TAG", "Activity Result: Old:" + photo);

             catch (Exception e) 
                e.printStackTrace();

            

            cursor.close();
            break;

        

     else 
        // gracefully handle failure
        Log.w("Auto Respond", "Warning: activity result not ok");
    

希望你能得到你想要的一切。

【讨论】:

以上是关于Android 手机联系人仅包含照片、电话和姓名的主要内容,如果未能解决你的问题,请参考以下文章

Android - 检索联系人照片和显示

android经常使用的电话操作

安卓怎么设置来电照片

android手机,新建联系人在通讯录无法显示。

如何仅使用他们的电话号码获取联系人姓名?

Android - 从电话号码获取联系人照片