android开发怎样获取通讯录联系人信息

2024年12月04日 23:37
有2个网友回答
网友(1):

  • 要获取通讯录的联系人信息,只有通过系统联系人应用的内容提供者,才能访问到联系人数据库,下面有一个代码演示

  • 代码演示

    • private ArrayList> readContact() {
          // 首先,从raw_contacts中读取联系人的id("contact_id")
          // 其次, 根据contact_id从data表中查询出相应的电话号码和联系人名称
          // 然后,根据mimetype来区分哪个是联系人,哪个是电话号码
          Uri rawContactsUri = Uri
                  .parse("content://com.android.contacts/raw_contacts");
          Uri dataUri = Uri.parse("content://com.android.contacts/data");
          ArrayList> list = new ArrayList<>();
          // 从raw_contacts中读取联系人的id("contact_id")
          Cursor rawContactsCursor = getContentResolver().query(rawContactsUri,
                  new String[]{"contact_id"}, null, null, null);
          if (rawContactsCursor != null) {
              while (rawContactsCursor.moveToNext()) {
                  String contactId = rawContactsCursor.getString(0);
                  // System.out.println(contactId);
                  // 根据contact_id从data表中查询出相应的电话号码和联系人名称, 实际上查询的是视图view_data
                  Cursor dataCursor = getContentResolver().query(dataUri,
                          new String[]{"data1", "mimetype"}, "contact_id=?",
                          new String[]{contactId}, null);
                  if (dataCursor != null) {
                      HashMap map = new HashMap();
                      while (dataCursor.moveToNext()) {
                          String data1 = dataCursor.getString(0);
                          String mimetype = dataCursor.getString(1);
                          // System.out.println(contactId + ";" + data1 + ";"
                          // + mimetype);
                          if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
                              map.put("phone", data1);
                          } else if ("vnd.android.cursor.item/name"
                                  .equals(mimetype)) {
                              map.put("name", data1);
                          }
                      }
                      list.add(map);
                      dataCursor.close();
                  }
              }
              rawContactsCursor.close();
          }
          return list;
      }


    • 手机联系人图片:


    • 这段代码运行后的图片


网友(2):

读取系统数据库,字段太多,就不写了,记得在app上加入读取权限,否则读取不了。