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(); 


 

       其他功能的介绍 待续......

原创粉丝点击