Android通讯录管理一之联系人获取

正如我们知道的一样,Android的通讯录和短信管理是通过contentprovider来向开发者来开发接口的。必须从ContentResolver入手去解决。其中通讯录操作涉及到系统源码api的使用,特别是在表的uri上面容易弄混。在接下来的几篇文章中蜗牛将陆续为大家推出Android通讯管理相关知识的文章。其中包括联系人获取、通话记录获取、短信获取、短信详情获取发送短信。废话不多说先上图

先看看联系人的表的结构

其中对于开发这来说主要关注以上三个表,其中要用到联合查询,关于三张表的设计可以百度到相关文章。

代码最终效果图

联系人:

想要源码的童鞋可以在下载;

package cn.zxw.contact.domain;/** * 联系人 * @author zhan * */public class ContactsInfo {public int _id;public String name;public String phone;public String email;public ContactsInfo() {super();}public ContactsInfo(int _id, String name, String phone, String email) {super();this._id = _id;this.name = name;this.phone = phone;this.email = email;}@Overridepublic String toString() {return "PersonInfo [_id=" + _id + ", name=" + name + ", phone=" + phone+ ", email=" + email + "]";}}获取联系人/** * 获取联系人 * * @param context * @return */public static List<ContactsInfo> getContactsInfos(Context context) {ContentResolver resolver = context.getContentResolver();List<ContactsInfo> infos = new ArrayList<ContactsInfo>();// 获取联系人数据 访问联系人的内容提供者// ContactsContract.AUTHORITY com.android.contacts 授权// 该内容提供者操作是需要读写权限// matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts",// RAW_CONTACTS);// matcher.addURI(ContactsContract.AUTHORITY, "raw_contacts/#/data",// RAW_CONTACTS_DATA);Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");Cursor cursor1 = resolver.query(uri, new String[] { "_id" }, null,null, null);while (cursor1.moveToNext()) {int _id = cursor1.getInt(0);ContactsInfo info = new ContactsInfo();uri = Uri.parse("content://com.android.contacts/raw_contacts/"+ _id + "/data");Cursor cursor2 = resolver.query(uri, new String[] { "data1","mimetype" }, null, null, null);while (cursor2.moveToNext()) {String data1 = cursor2.getString(0);String mimetype = cursor2.getString(1);if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {// 号码info.phone = data1;} else if ("vnd.android.cursor.item/name".equals(mimetype)) {// 姓名info.name = data1;}}cursor2.close();infos.add(info);}cursor1.close();return infos;}/** * 获取所有的通话记录 * * @param context * @return */public List<CallLogInfo> getCallLog(Context context) {List<CallLogInfo> infos = new ArrayList<CallLogInfo>();ContentResolver cr = context.getContentResolver();Uri uri = Calls.CONTENT_URI;String[] projection = new String[] { Calls.NUMBER, Calls.DATE,Calls.TYPE };Cursor cursor = cr.query(uri, projection, null, null, null);while (cursor.moveToNext()) {String number = cursor.getString(0);long date = cursor.getLong(1);int type = cursor.getInt(2);infos.add(new CallLogInfo(number, date, type));}cursor.close();return infos;}package cn.zxw.contact;import java.util.ArrayList;import java.util.List;import cn.zxw.contact.domain.ContactsInfo;import cn.zxw.contact.utils.ContactsMsgUtils;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;import android.app.Activity;/** * 联系人 * * @author zhan * */public class ContactsActivity extends Activity {private ListView lv;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_contacts_msg_calllog);lv = (ListView) findViewById(R.id.lv);List<ContactsInfo> infos = ContactsMsgUtils.getContactsInfos(getApplicationContext());MyAdapter adapter = new MyAdapter(infos);lv.setAdapter(adapter);}private class MyAdapter extends BaseAdapter {//List<ContactsInfo> infos = new ArrayList<ContactsInfo>();private TextView tv_number;private TextView tv_name;public MyAdapter(List<ContactsInfo> infos) {super();this.infos = infos;}@Overridepublic int getCount() {return infos.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view = View.inflate(getApplicationContext(),R.layout.contacts_list_item, null);tv_number = (TextView) view.findViewById(R.id.tv_number);tv_name = (TextView) view.findViewById(R.id.tv_name);ContactsInfo info = infos.get(position);tv_number.setText(info.phone);tv_name.setText(info.name);return view;}}}

,初初尝试着拥抱的人,一派新鲜幸福都来不及沉浸,

Android通讯录管理一之联系人获取

相关文章:

你感兴趣的文章:

标签云: