先扔俩权限试试水
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
javabean
public class Contact {
private String id;
private String name;
private String email;
private String phone;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Contact{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
读取联系人的工具类
public class ReadContactUtils {
private static final String TAG = "jojo";
public static List<Contact> readContact(Context context) {
//0 创建集合对象
List<Contact> contactsLists = new ArrayList<>();
//1 由于联系人的数据库也是通过内容提供者暴露出来了,所以我想直接使用内容解析者操作数据库
//2 先查询raw_contacts表 contact_id列
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
Cursor cursor = context.getContentResolver().query(uri, new String[] {"contact_id"}, null, null, null);
while (cursor.moveToNext()) {
String contact_id = cursor.getString(0);
if (contact_id != null) {
Log.d(TAG, "contact_id" + contact_id);
// 创建javabean对象
Contact contact = new Contact();
contact.setId(contact_id);
//3 根据rew_contact_id去查询data表,data1列和mimetype_id列
//小细节 查询的不是data表,而是view_data的视图
Cursor dataCursor = context.getContentResolver().query(dataUri, new String[] {"data1", "mimetype"}, "raw_contact_id = ?", new String[] {contact_id}, null);
while (dataCursor.moveToNext()) {
String data1 = dataCursor.getString(0);
String mimetype = dataCursor.getString(1);
if ("vnd.android.cursor.item/name".equals(mimetype)) {
Log.d(TAG, "姓名:" + data1);
contact.setName(data1);
} else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
Log.d(TAG, "电话号码:" + data1);
contact.setPhone(data1);
} else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
Log.d(TAG, "邮箱:" + data1);
contact.setEmail(data1);
}
}
// 把javabean对象加入到结合中
contactsLists.add(contact);
}
}
return contactsLists;
}
}
主函数类
public class MainActivity extends AppCompatActivity {
private static final String TAG = "jojo";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List<Contact> readContacts = ReadContactUtils.readContact(getApplicationContext());
for (Contact contact : readContacts) {
Log.d(TAG, "onCreate: contact:" + contact);
}
}
}
直接打开会报错,去手机设置里把APP权限开了