安卓中的四大组件_ContentProvider
来源:互联网 发布:淘宝新开的店铺发货慢 编辑:程序博客网 时间:2024/05/29 02:15
创建数据库. SQLiteOpenHelper.
调用的过程.
证监会程序, 创建一个内容提供者, 并且在清单文件中添加一个authorities属性.
证监会程序的内容提供者需要添加一些Uri标识(分机号), 为了方便去区分是操作哪一张表.
mUriMatcher.addURI("com.ycy.domain.person", "person/insert", 1);
需要在内容提供者中的insert方法中判断, 被传进来的Uri对象匹配以下, 是否和我们上面添加的uri相匹配.
int match = mUriMatcher.match(uri);switch (match) {case 1: // 对person表添加的操作 System.out.println("对person表添加"); break;default: throw new IllegalArgumentException("Uri 匹配失败, Uri: " + uri);}
其他的程序, 拿着证监会程序的内容提供者的Uri, 就可以访问.
短信备份和恢复.
- sms表就是系统用来存放所有的短信的.
操作sms表的Uri: content://sms
备份的内容: address, date, type, body
通过内容提供者,获取系统数据库中所有的短信
private List<Sms> getSmsListFromProvider() { Uri uri = Uri.parse("content://sms"); ContentResolver resolver = getContentResolver(); Cursor cursor = resolver.query(uri, new String[] { "address", "date", "type", "body" }, null, null, null); List<Sms> smsList = null; if (cursor != null && cursor.getCount() > 0) { smsList = new ArrayList<Sms>(); Sms sms = null; while (cursor.moveToNext()) { sms = new Sms(cursor.getString(0), cursor.getLong(1), cursor.getInt(2), cursor.getString(3)); smsList.add(sms); sms = null; } } return smsList;}
从sd卡中取出备份的短信,并通过内容提供者插入到系统短信数据库中
private boolean restoreSmsFromLocal(List<Sms> list) { ContentResolver resolver = getContentResolver(); Uri uri = Uri.parse("content://sms"); ContentValues values = new ContentValues(); for (Sms sms : list) { values.put("address", sms.getAddress()); values.put("date", sms.getDate()); values.put("type", sms.getType()); values.put("body", sms.getBody()); resolver.insert(uri, values); } return true;}
操作联系人.
raw_contacts 表存放着所有联系人列表, 此表中没有存储联系人的详细信息.
data 表中存放着每一个联系人的详细数据.
查询所有联系人步骤:
查询rawcontacts表中所有的数据. 获取出每一个联系人的id.
select _id from raw_contacts;
根据第一步查到每一个人的_id, 去data表中查询对应这个联系人的所有数据.
select data1, mimetype from data where raw_contact_id = 1;
添加一个联系人
查询rawcontacts表的最后一条记录的contactid. 再此基础上+1得到一个新的id.
向raw_contacts添加一条数据. 把上面得到的最新的id添加进去.
根据新的id, 向data表中添加三条数据.
- 姓名
- 号码
- 邮箱
操作rawcontacts表的Uri: content://com.android.contacts/rawcontacts
操作data表的Uri: content://com.android.contacts/data
private Uri rawcontactsUri = Uri.parse("content://com.android.contacts/raw_contacts");private Uri dataUri = Uri.parse("content://com.android.contacts/data");private ContentResolver resolver = getContentResolver();
通过内容提供者读取出系统联系人,并存入集合中
private List<ContactsInfo> readContacts() { Cursor rawcontactsCursor = resolver.query(rawcontactsUri, new String[] { "_id" }, null, null, null); List<ContactsInfo> list = null; if (rawcontactsCursor != null && rawcontactsCursor.getCount() > 0) { Cursor dataCursor = null; ContactsInfo contacts = null; list = new ArrayList<ContactsInfo>(); String data1 = "", mimetype = ""; while (rawcontactsCursor.moveToNext()) { int id = rawcontactsCursor.getInt(0); contacts = new ContactsInfo(); dataCursor = resolver.query(dataUri, new String[] { "data1", "mimetype" }, "raw_contact_id=?", new String[] { id + "" }, null); if (dataCursor != null && dataCursor.getCount() > 0) { while (dataCursor.moveToNext()) { data1 = dataCursor.getString(0); mimetype = dataCursor.getString(1); if ("vnd.android.cursor.item/name".equals(mimetype)) { contacts.setName(data1); } else if ("vnd.android.cursor.item/phone_v2" .equals(mimetype)) { contacts.setPhone(data1); } else if ("vnd.android.cursor.item/email_v2" .equals(mimetype)) { contacts.setEmail(data1); } } dataCursor.close(); } list.add(contacts); } rawcontactsCursor.close(); } return list;}
通过内容提供者,将数据添加到系统联系人数据库中
private void writeContacts() {Cursor cursor = resolver.query(rawcontactsUri, new String[] { "_id" }, null, null, "_id desc limit 1");int contact_id;if (cursor != null && cursor.moveToFirst()) { contact_id = cursor.getInt(0); cursor.close();} else { contact_id = 0;}int newContact_id = contact_id + 1;// 插入到raw_contacts表中ContentValues values = new ContentValues();values.put("contact_id", newContact_id);resolver.insert(rawcontactsUri, values);// 插入到data表中// 插入姓名ContentValues dataValues = new ContentValues();dataValues.put("mimetype", "vnd.android.cursor.item/name");dataValues.put("raw_contact_id", newContact_id);dataValues.put("data1", "name12345678");resolver.insert(dataUri, dataValues);// 插入电话dataValues.put("mimetype", "vnd.android.cursor.item/phone_v2");dataValues.put("raw_contact_id", newContact_id);dataValues.put("data1", "12345678");resolver.insert(dataUri, dataValues);// 插入邮箱dataValues.put("mimetype", "vnd.android.cursor.item/email_v2");dataValues.put("raw_contact_id", newContact_id);dataValues.put("data1", "12345678@name12345678.com");resolver.insert(dataUri, dataValues);
}
内容观察者(观察某个数据库数据是否改变) ContentObserver
观察手机发出去的短信.
发件箱的Uri: content://sms/outbox
// 观察系统sms表是否有变化ContentResolver resolver = getContentResolver();Uri uri = Uri.parse("content://sms");// 注册一个内容观察者, 观察系统短信中sms表的变化, sms一旦发生变化, 会触发MyContentObserver类的onChange方法resolver.registerContentObserver(uri, true, new MyContentObserver(new Handler()));/** * @author andong * 内容观察者类 */class MyContentObserver extends ContentObserver { public MyContentObserver(Handler handler) { super(handler); } @Override public void onChange(boolean selfChange) { System.out.println("sms表发生改变了..."); // 查询发件箱里的短信. Uri outBoxUri = Uri.parse("content://sms/outbox"); String[] projection = {"address", "date", "body"}; Cursor cursor = getContentResolver().query(outBoxUri, projection, null, null, null); if(cursor != null && cursor.getCount() > 0) { while(cursor.moveToNext()) { String address = cursor.getString(0); long date = cursor.getLong(1); String body = cursor.getString(2); String strDate = DateFormat.getTimeFormat(MainActivity.this).format(date); System.out.println("号码: " + address + ", 日期: " + strDate + ", 内容: " + body); } cursor.close(); } }}
内容观察者使用步骤
在警察应用中观察一个Uri.
在证监会应用中的增删改三个方法, 发出通知Uri, 数据改变了.
警察的应用中的内容观察者的onChange方法会被执行.
- 安卓中的四大组件_ContentProvider
- 9_四大组件之一_ContentProvider
- 安卓中的四大组件_Activity
- 安卓中的四大组件_BroadcastReceiver
- 安卓中的四大组件_Service
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 安卓四大组件
- 写给初学者19_android_四大组件_ContentProvider初级
- 安卓四大组件简述
- 安卓的四大组件
- Android安卓四大组件
- 【第六章】 AOP 之 6.9 代理机制 ——跟我学spring3
- 【第七章】 对JDBC的支持 之 7.1 概述 ——跟我学spring3
- 成都国际非物质文化遗产博览园
- 【Linux基础】消息队列应用
- java面试题01
- 安卓中的四大组件_ContentProvider
- 【Linux基础】信号量基本操作
- plsa代码实现
- C#中获得月份中的第一天和最后一天和判断闰年
- HDU-1045-Fire Net
- EOJ 1835 梦乡
- 如何制作一寸。二寸。六寸照片 多学点,以后自己也可以弄哦
- Tegra平台back camera 驱动实现四
- 基于 Pomelo TCP 网络通讯的 Flash as3 组件(v0.0.5a)