Android使用ContectResolver操作别的应用中的数据
来源:互联网 发布:快乐拍软件 编辑:程序博客网 时间:2024/06/05 16:20
当应用程序需要与别的应用进行交互时,需要使用Android提供的两个类,ContentProvider和ContentResolver来实现相关功能。ContentProvider用来提供内容给别的应用来操作,ContentResolver用来操作(包括查询、插入等)别的应用数据,当然在自己的应用中也可以。 本着重讲解ContentResolver的用法。
可用通过Context来获取ContentResolver的实例,在Activity中,可以直接使用下面这句:
ContentResolver resolver = this.getContentResolver();
获取到该对象后,可实现如下一些常用的功能:
//查询: public final Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder); //新增 public final Uri insert(Uri url, ContentValues values) //更新 public final int update(Uri uri, ContentValues values, String where, String[] selectionArgs) //删除 public final int delete(Uri url, String where, String[] selectionArgs)
查询
query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
描述:根据指定的URI,返回一个游标结果集Cursor。为了提高性能,使用该方法最好能遵照以下的建议:1)对于返回结果,使用projection参数指定记录中包含的字段,以避免大量不用的字段被检索,浪费资源;2)在selection参数中使用类似phone=?的问号表达式来指定检索条件中的字段值,尽量不要使用指定值(比如phone='123'),这样有利于查询的系统缓存。
参数:
uri 表示用于获取什么内容的URI,比如通讯录为Phone.CONTENT_URI
projection 字段名称数组,比如要获取联系人的显示名称、电话号码、头像ID、联系人ID,则值为:
new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID }
selection 查询条件字符串,类似sql语句中的where子句,比如:display_name=? and number=?
selectionArgs 参数selection中问号(?)对应的参数值数组
sortOrder 对应sql语句的order by子句,如采用默认排序,值可传null值。
下面是读取手机通讯录信息的一段代码,首先获取通讯录的所有信息,通过嵌套获取各个联系人的多个手机号码:
ContentResolver contentResolver = getContentResolver();Cursor cursor = contentResolver.query ( ContactsContract.Contacts.CONTENT_URI, null, null, null, null);// 游标移到结果集第一个行if (cursor.moveToFirst()) { // id列的索引值int idColumnIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID); // 用户名列的索引值int dispalyNameColumnIndex = cursor.getColumnIndex( ContactsContract.Contacts.DISPLAY_NAME); do {// 获取用户Id值String contactId = cursor.getString(idColumnIndex); //获取用户名值String displayName = cursor.getString(dispalyNameColumnIndex); // 获取用户号码数量int phoneNumberCount = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); if (phoneNumberCount > 0) {Cursor phoneNumberCursor = getContentResolver(). query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, // 获取当前用户号码结果集ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactId,null,null); //游标移到所有号码结果集第一个行if (phoneNumberCursor.moveToFirst()) { do {// 获取号码String phoneNumber = phoneNumberCursor.getString(phoneNumberCursor.getColumnIndex( ContactsContract.CommonDataKinds.Phone.NUMBER)); } while (phoneNumberCursor.moveToNext());}// 关闭游标phoneNumberCursor.close(); }} while(cursor.moveToNext()); }// 关闭游标cursor.close();
其他功能的介绍 待续......
- Android使用ContectResolver操作别的应用中的数据
- 【android】 调用别的应用的activity
- Android调用别的应用的Activity
- Android Intent启动别的应用…
- Android Intent启动别的应用…
- android 中使用ContentResolver操作ContentProvider中的数据
- Android笔记使用ContentResolver操作ContentProvider中的数据
- Android应用中的数据缓存
- [意译]Android Developer - 接收别的APP传来的数据
- Android中的数据存储: SD操作
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- 使用ContentResolver操作ContentProvider中的数据
- DM36x IPNC OSD显示中文 --- 基本数据准备篇
- Win32程序的开发流程和运行图解
- springMVC之annotation优化
- 来这里做一下技术笔记
- we sign the 3 page from left to right with -1,0,1
- Android使用ContectResolver操作别的应用中的数据
- XXX.axf: Error: L6218E: Undefined symbol xxx (referred from xxxx.o).
- eclipse添加类模板注释
- js 标签隔行显示颜色
- 二叉树转换为双向链表
- [LDD3速记]_tasklet、工作队列、共享队列
- iOS 在一个程序中启动另一程序
- 利用SetUnhandledExceptionFilter获取程序异常时的DUMP文件
- crossdomain.xml 配置说明