Android四大组件之ContentProvider
ContentProvider适用场景:
1) ContentProvider为存储和读取数据提供了统一的接口。
2) 使用ContentProvider,应用程序可以实现数据共享。
3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)。
如何实现ContentProvider?
1.继承抽象类ContentProvider实现一系列针对于数据的增、删、改、查等方法;
2.需要在AndroidMainfest.xml中完成对ContentProvider的注册。
何为Uri?
Uri是指通用资源标识符
content://com.example.provider/music/#
第一段:前缀表明数据受控于一个内容提供者。它从不修改,也就是schema
第二段:是指在AndroidMainfest.xml中我们注册的Provider中的android:authorities属性所对应的
第三段:具体操作于哪个条目
第四段:具体指定到哪个条目下的哪条记录(#表示通配符)
ContentResolver:
使用ContentResolver操作ContentProvider中的数据:
1.当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成
2.使用Activity提供的getContentResolver()方法获取ContentResolver对象
3.ContentResolver类提供了与ContentProvider类相同签名的四个方法
看下列代码展示:
ContentResolver cr=getContentResolver(); Cursor c=cr.query(Contacts.CONTENT_URI, new String[]{Contacts._ID,Contacts.DISPLAY_NAME}, null,null, null); if(c!=null) { while(c.moveToNext()) { int id=c.getInt(c.getColumnIndex("_id")); Log.i("info", "_id:"+id); Log.i("info", "name:"+c.getString(c.getColumnIndex("display_name"))); Cursor c1=cr.query(Phone.CONTENT_URI, new String[]{Phone.NUMBER,Phone.TYPE}, Phone.CONTACT_ID+"="+id, null, null); //根据联系人ID查询出联系人的电话号码 if(c1!=null) { while(c1.moveToNext()) { int type=c1.getInt(c1.getColumnIndex(Phone.TYPE)); if(type==Phone.TYPE_HOME) { Log.i("info", "家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER))); } else { Log.i("info", "手机:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));} } c1.close(); } //根据联系人的ID去查询出联系人的邮箱 Cursor c2=cr.query(Email.CONTENT_URI, new String[]{Email.DATA,Email.TYPE}, Email.CONTACT_ID+"="+id, null, null); if (c2!=null) {while (c2.moveToNext()) { int type=c2.getInt(c2.getColumnIndex(Email.TYPE)); if (type==Email.TYPE_WORK) {Log.i("info", "工作邮箱:"+c2.getString(c2.getColumnIndex(Email.DATA)));}}c2.close();} } c.close(); }
还有一个注意的地方就是设置访问权限:
自己先在通讯录里创建两个联系人:如Jim和张三
运行结果如下:
更多相关文章
- 一句话锁定MySQL数据占用元凶
- SQLite数据库相关(三) SQLiteOpenHelper类
- Android开发系列(二十二):AdapterViewFlipper的功能和使用方法
- Android(安卓)播放视频常见问题小结
- 调用startactivityforresult后,onactivityresult立刻返回RESULT_C
- Android(安卓)Studio 四大组件之 Service的生命周期上
- android contacts 联系人搜索解析
- Android(安卓)中Binder的解释
- Android(安卓)开发过程中遇到的各类问题总结