Android 联系人数据库介绍以及对联系人的基本操作
来源:互联网 发布:网络人软件 编辑:程序博客网 时间:2024/05/22 14:45
Android 联系人数据库介绍以及对联系人的基本操作
版权声明:本文为博主原创文章,未经博主允许不得转载。
一、 联系人数据库
联系人的数据库文件的位置
/data/data/com.Android.providers.contacts/databases.contacts2.db
数据库中重要的几张表
1、contacts表
该表保存了所有的手机测联系人,每个联系人占一行,该表保存了联系人的
ContactID、联系次数、最后一次联系的时间、是否含有号码、是否被添加
到收藏夹等信息。
2、raw_contacts表
该表保存了所有创建过的手机测联系人,每个联系人占一行,表里有一列标
识该联系人是否被删除,该表保存了两个ID:RawContactID和ContactID,
从而将contacts表和raw_contacts表联系起来。该表保存了联系人的
RawContactID、ContactID、联系次数、最后一次联系的时间、是否被添
加到收藏夹、显示的名字、用于排序的汉语拼音等信息。
3、 mimetypes
该表定义了所有的MimeTypeID,即联系人的各个字段的唯一标志。
4、data表
该表保存了所有创建过的手机测联系人的所有信息,每个字段占一行 ,该表
保存了两个ID:MimeTypeID和RawContactID,从而将data表和
raw_contacts表联系起来。
联系人的所有信息保存在列data1至data15中,各列中保存的内容根据
MimeTypeID的不同而不同。如保存号码(MimeTypeID=5)的那行数据中,
data1列保存号码,data2列保存号码类型(手机号码/家庭号码/工作号码等)。
一:联系人数据库查询
public class MainActivity extends Activity { private ListView listView; private TextView empty; private ContentResolver resolver;// 联系人表的uri private Uri contactsUri = Contacts.CONTENT_URI; private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.d("flag","------------->NUMBER: "+ContactsContract.CommonDataKinds.Phone.NUMBER); initView(); resolver = getContentResolver(); Cursor contactsCursor = resolver.query(contactsUri, null, null, null, null); List<Map<String,Object>> data = parseCursor(contactsCursor); SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item, new String[]{"display_name","phone","email"}, new int[]{R.id.displayName,R.id.phone,R.id.email}); listView.setAdapter(adapter); listView.setEmptyView(empty); } private List<Map<String, Object>> parseCursor(Cursor contactsCursor) { List<Map<String,Object>> data = new ArrayList<Map<String,Object>>(); while(contactsCursor.moveToNext()){ Map<String,Object> map = new HashMap<String, Object>();// 获取联系人的id int _id = contactsCursor.getInt(contactsCursor.getColumnIndex(Contacts._ID)); String name = contactsCursor.getString(contactsCursor.getColumnIndex(Contacts.DISPLAY_NAME)); map.put("display_name", name);// 根据联系人的_id(此处获取的_id和raw_contact_id相同,因为contacts表就是通过这两个字段和raw_contacts表取得联系)查询电话和email// 查询电话 Cursor phoneCursor = resolver.query(phoneUri, new String[]{ContactsContract.CommonDataKinds.Phone.DATA1}, "raw_contact_id = ?", new String[]{_id+""}, null); String phone = ""; while(phoneCursor.moveToNext()){ phone = phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } map.put("phone", phone); phoneCursor.close(); phoneCursor = null;// 查询邮箱 Cursor emailCursor = resolver.query(emailUri, new String[]{ContactsContract.CommonDataKinds.Email.ADDRESS}, "raw_contact_id = ?", new String[]{_id+""}, null); String email = null; while(emailCursor.moveToNext()){ email = emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.ADDRESS)); } map.put("email", email); data.add(map); } return data; } private void initView() { // TODO Auto-generated method stub listView = (ListView) findViewById(R.id.listView); empty = (TextView) findViewById(R.id.empty); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
二:联系人数据库添加
// 插入数据 public void btnInsert(View view){// 1、向rawUri中插入一条空的数据 ContentValues values = new ContentValues(); Uri insert = resolver.insert(RawContacts.CONTENT_URI, values);// 2、获取raw_id long _id= ContentUris.parseId(insert);// 3、向data表中添加数据,向data表中插入数据是分条添加,因为调用一次insert只能向数据库中添加一个字段的数据 ContentValues valuesName = new ContentValues();// 3.1、向哪一条联系人中添加数据 valuesName.put(ContactsContract.Data.RAW_CONTACT_ID, _id);// 3.2、添加名字// data1 valuesName.put(ContactsContract.CommonDataKinds.StructuredName.DATA1, "huanhuanlele");// 3.3、指定类型 valuesName.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE); resolver.insert(ContactsContract.Data.CONTENT_URI, valuesName);// 添加电话 ContentValues valuesNumber = new ContentValues();// 1、指定_id valuesNumber.put(ContactsContract.Data.RAW_CONTACT_ID, _id);// 2、添加电话号码 valuesNumber.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "1234567890");// 3、指定数据类型 valuesNumber.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE); resolver.insert(ContactsContract.Data.CONTENT_URI, valuesNumber);// 添加Email ContentValues valuesEmail = new ContentValues();// 1、指定_id valuesEmail.put(ContactsContract.Data.RAW_CONTACT_ID, _id);// 2、添加数据// data1 valuesEmail.put(ContactsContract.CommonDataKinds.Email.DATA1, "234567@163.com");// 3、指定数据类型 valuesEmail.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE); resolver.insert(ContactsContract.Data.CONTENT_URI, valuesEmail); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
三:联系人数据库删除
// 删除联系人 public void btnDelete(View view){ int delete = resolver.delete(ContactsContract.Data.CONTENT_URI, ContactsContract.Data.RAW_CONTACT_ID+" = ?", new String[]{5+""}); if(delete>=0){ Toast.makeText(MainActivity.this, "删除成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this, "删除失败", Toast.LENGTH_LONG).show(); } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
四:联系人数据库更新
// 更新联系人 public void btnUpdate(View view){ ContentValues valuesUpdate = new ContentValues(); valuesUpdate.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "4444444445678"); int update = resolver.update(ContactsContract.Data.CONTENT_URI, valuesUpdate, ContactsContract.Data.RAW_CONTACT_ID+" = ? and "+ ContactsContract.Data.MIMETYPE+" = ?", new String[]{6+"",5+""}); if(update>=0){//更新成功 Toast.makeText(MainActivity.this, "更新数据成功", Toast.LENGTH_LONG).show(); }else{ Toast.makeText(MainActivity.this, "更新数据失败", Toast.LENGTH_LONG).show(); } }
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- content provider对联系人的基本操作
- Android 联系人数据库操作
- android操作通讯录的联系人
- Android--操作联系人的ContentProvider
- Android 通讯录 数据库的结构以及获取联系人方式
- Android开发之ContentProvider对联系人操作
- Android 联系人数据库contacts2.db介绍
- Android ContentProvider之联系人数据库及操作
- Android中联系人的操作(读取和写入联系人)
- vb中sub main到底是个啥
- O
- How do I enable core dumps for everybody
- Halcon笔记
- 当spring 容器初始化完成后执行某个方法
- Android 联系人数据库介绍以及对联系人的基本操作
- 爬虫基本工作原理
- 随机森林在Kaggle实例:Titanic中的应用(一)
- NOIP模拟 排列【权值线段树】
- Spring-boot:快速搭建微服务框架
- B
- clock_gettime获取时间
- 301. Remove Invalid Parentheses
- 基于PCA的ORL人脸库特征抽取