ContenProvider--联系人和媒体库的操作

ContenProvider




通过Uri访问
如何实现ContenProvider?
1、继承抽象类ContenProvider实现一系列对于数据的增、删、改、查等方法;
2、需要在AndroidMainfest.xml中完成对ContenProvider的注册。
        <provider
            android:authorities="全局唯一的标识符"
            android:name="类名"/>
注:authorities
---何为Uri?
 Uri是指通用资源标识符
  列:ABCD
A:content://  表明数据受控一个类容提供者不修改
B: 一般为包名  唯一标识符(对应AndroidMainfest.xml文件中的 :authorities属性)
C:           具体操作与那个条目。
D: #   具体指定到那个条目下的那条记录(#表示通配符)
UriMatcher类(查询)
UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
 --UriMatcher.NO_MATCH表示不匹配任何路径的返回码
matcher.addURI("com.imooc.provider","music",1);
 --往UriMatcher类里添加一个平凑的Uri
 --UriMatcher为一个Uri的容器,容器里包含着我们即将可能要操作的Uri
 --如果通过match()方法匹配成功就返回code值——
matcher.match(uri)
 --首先与找通过addURI()方法添加进来的Uri匹配
 --匹配成功返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1)
一般我们都只是操作访问:
ContentResolver:
使用ContentResolver操作ContentProvider中弹数据:
 -当外部应用需要对ContentProvider中的数据进行添加,删除、修改、和查询时,可以使用ContentResolver类来完成
 -使用Activity提供的getContentResolver()方法获取ContentResolver对象
 -ContentResolver类提供了与ContentProvider类相同签名的四个方法

常量:
ContactsContract.Contacts.CONTENT_URI——联系人的Uri
 加权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
______________________________________
先看一下ContenProvider的方法并没有实现任何功能:
/**你实现了什么方法别人就只能用你实现了的方法
 * Created by Administrator on 2016/3/14 0014.
 */
public class MyContentProvider extends ContentProvider {
    @Override
    //创建时调用
    public boolean onCreate() {
        return false;
    }
    @Nullable
    @Override
    /** 根据uri查询selection匹配的记录,并却可以指定以(sortOrder)什么排序
     * uri              ContactsContract.Contacts.CONTENT_URI,联系人的Uri
     * projection       查询的字段(列名)
     * selection        根据什么(字段)查询
     * selectionArgs    1
     * sortOrder        指定以什么排序
     */
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return null;
    }
    @Nullable
    @Override
    //返回当前URi的MIMI类型,如果该URI对应的数据可能包括多条记录。那么MIMI类型字符串就是以vnd.android.dir/开头
    //如果该URI对应的数据只有一条记录,该MIMI字符串就是以vnd.android.cursor.item/开头
    public String getType(Uri uri) {
        return null;
    }
    @Nullable
    @Override
    //根据uri插入values的数据;
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    @Override
    //根据uri删除selection指定的记录
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    @Override
    //根据uri修改selectionArgs指定的记录
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }
}
联系人多查询和添加:

    public void test(){
        ContentResolver v =getContentResolver();
        // ContactsContract.Contacts.CONTENT_URI,联系人的Uri
        Cursor c=v.query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID}, null, null, null);
        if (c!=null){
            while (c.moveToNext()){
                int id=c.getInt(c.getColumnIndex("_ID"));
                Log.e("********", "id------->" + id);
                //根据id查询电话号码
                Cursor c1= v.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.TYPE},
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id,
                        null, null);
                if (c1!=null){
                    while (c1.moveToNext()){
                        int type=c1.getInt(c1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                        Log.e("********", " num------->" + c1.getString(c1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
                    }
                    c1.close();//一定要清理掉;
                }
                //根据id查询邮箱
                Cursor c2=v.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                        new String[]{ContactsContract.CommonDataKinds.Email.DATA, ContactsContract.CommonDataKinds.Email.TYPE}, ContactsContract.CommonDataKinds.Email._ID,null,null);
                if (c2!=null){
                    while (c2.moveToNext()){
                        int email=c2.getInt(c2.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE));
                        Log.e("********", " email------->" +c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)));
                    }
                    c2.close();
                }
            }
           c.close();//一定要清理掉;
        }
    }
    public void testinsert(){
        ContentResolver v=getContentResolver();
        ContentValues values=new ContentValues();
        //首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的raw_Contact_Id
        Uri uri=v.insert(ContactsContract.RawContacts.CONTENT_URI, values);
        long raw_contact_id= ContentUris.parseId(uri);
        Log.e("********", "raw_contact_id------->" +raw_contact_id );
        values.clear();
        values.put(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, raw_contact_id);
        values.put(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, "啊啊啊");//名字:
        values.put(ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
        uri=v.insert(ContactsContract.Data.CONTENT_URI, values);
        values.clear();
        values.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID,raw_contact_id);
        values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,"13333333333");
        values.put(ContactsContract.CommonDataKinds.Phone.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
        uri=v.insert(ContactsContract.Data.CONTENT_URI,values);
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值