获取手机联系人的两种方法
第一种方法比较简单 就几句话 但是获取的信息不完善
第二种方法比较难 代码比较多 获取的信息全
须要加的权限 :
<uses-permission android:name="android.permission.READ_CONTACTS"/>
import java.util.List;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void btnReadContacts(View v){
//StringBuffer sb = readContact();
List<Contacts> contacts = readContact();
System.out.println("联系人信息 : "+contacts.toString());
}
//读取联系人记得加权限
public void btnOtherReadContacts(View v){
//内容提供者的解析器对象
ContentResolver resolver = getContentResolver();
//这个循环的是data表
Cursor cursor = resolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
StringBuffer sb = new StringBuffer();
while(cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String phone = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
sb.append("姓名 : "+name+" 电话 : "+phone);
}
System.out.println("--- : "+sb.toString());
}
/**
* 读取系统联系人
* @return 返回所有联系人的信息
*/
private List<Contacts> readContact() {
//获取一个内容提供者解析器对象 看作一个手机
ContentResolver resolver = getContentResolver();
//这个就是查询raw_contacts
Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
//这个是查询的data表
Uri dataUri = Uri.parse("content://com.android.contacts/data");
//select * from raw_contacts;
Cursor rawCursor = resolver.query(uri, null, null, null, null);
//创建一个存放联系人的容器
//StringBuffer sb = new StringBuffer();
List<Contacts> contactsList = new ArrayList<Contacts>();
while(rawCursor.moveToNext()){
Contacts contacts = new Contacts();
//得到联系人的id
int id = rawCursor.getInt(rawCursor.getColumnIndex("contact_id"));
//select * from data where raw_contact_id = id?
Cursor dataCursor = resolver.query(dataUri, null, "raw_contact_id = ?", new String[]{id+""}, null);
//得到指定表所返回的列名
/*String[] names = dataCursor.getColumnNames();
for (int i = 0; i < names.length; i++) {
System.out.println("列名 -> "+names[i]);
}*/
while(dataCursor.moveToNext()){
//获取联系人的数据 电话、邮箱
String content = dataCursor.getString(dataCursor.getColumnIndex("data1"));
String mimetype = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));
//用于判断数据到底是一个什么类型的数据
if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
//sb.append("电话 : "+content);
contacts.setPhone(content);
}else if("vnd.android.cursor.item/email_v2".equals(mimetype)){
//sb.append("邮箱 : "+content);
contacts.setEmial(content);
}else if("vnd.android.cursor.item/name".equals(mimetype)){
//sb.append("姓名 : "+content+"\n");
contacts.setName(content);
}
}
contactsList.add(contacts);
}
return contactsList;
}
}