ContentProvider内容提供器
2015-09-09 09:02
495 查看
内容提供器简介
访问其他程序中的数据
ContentResolver的基本用法
读取模拟器中的联系人代码
内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中数据,另一种是创建自己的你内容提供器给我们程序的数据提供外部访问接口。
布局只需要在activity_main中加一个Button就可以了。
访问其他程序中的数据
ContentResolver的基本用法
读取模拟器中的联系人代码
内容提供器简介
内容提供器主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。不同于文件存储和SharedPreferences存储中的两种全局可读写操作模式,内容提供器可以选择只对哪一步分数据进行共享,从而 保证我们程序中的隐私数据不会被泄露。内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中数据,另一种是创建自己的你内容提供器给我们程序的数据提供外部访问接口。
访问其他程序中的数据
当一个应用程序通过内容提供器对其数据提供了外部访问接口,任何其它的应用程序就都可以对这部分数据进行访问,Android中自带的电话簿、短信、媒体库等程序都提供了类似的访问接口,这使得第三方应用程序可以充分地利用这部分数据来实现更好的功能ContentResolver的基本用法
1、想要访问内容提供器中共享的数据,就一定要借助ContentResolver类,可以通过Context中的getContentResolver()方法来获取到该类的实例。ContentResolver中提供了一系列的方法用于对数据进行CRUD操作,(insert()、update()、delete()、query()),不同于SQLiteDatabase , ContentResolver中的增删改查方法都是不接收表名参数,而使用一个Uri参数代替,这个参数被称为内容URI,内容URI给内容提供器中的数据建立了唯一标识符,它主要有两部分组成,权限(authority)和路径(path)。权限是用于对不同的应用程序做区分的,(一般为了避免冲突,都会采用程序包名的方式来进行命名,比如某个程序的包名是com.example.app,那么该程序对应的权限就可以命名为com.example.app.provider),路径则是用于对同一应用程序中不同的表做区分的,通常会添加到权限的后面,比如com.example.app.provider/table1 ,com.example.app.provider/table2读取模拟器中的联系人代码
[code]public class MainActivity extends Activity { private Button mButton; private ContentResolver resolver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton= (Button) findViewById(R.id.button_contact); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { resolver=getContentResolver();//通过Context中的getContentResolver()方法获取到该类的实例 //content://com.android.contacts Uri uri= ContactsContract.Data.CONTENT_URI;//得到内容URI字符串之后,需要将它解析成Uri的对象才可以作为参数传入 //Uri uri=Uri.parse("content://com.example.app.provider/table1") Cursor cursor=resolver.query(uri,new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER,ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME},null,null,null); cursor.moveToFirst();//将光标移动到第一条数据 while(!cursor.isAfterLast()){ String [] names=cursor.getColumnNames();//将姓名、工作地点、手机号、邮箱等键值存入到names数组中 StringBuffer buffer=new StringBuffer();//字符串缓存 for(String name:names){ String value=cursor.getString(cursor.getColumnIndex(name));//通过cursor得到键值对应的值 buffer.append("字段名:"+name+" 字段值"+value);//将键值和对应的值放入到buffer中 } Log.d("联系人",""+buffer);//打印出键值和值 cursor.moveToNext();//将光标下移一个 } } }); } }
布局只需要在activity_main中加一个Button就可以了。
相关文章推荐
- Laravel 视图模块运行流程
- phpweb /version.php Vul
- PHP调试网页出现乱码解决方法!
- [LinkerScript.16] SECTION命令: Output Section Address
- [LinkerScript.15] SECTION命令: Output Section Name
- [LinkerScript.14] SECTION命令: Output Section Description
- php闭包使用
- PHP5.4最新特性
- 从二维PHP数组中取出某个键名的值数组
- PHP开发工程师(高薪急聘)
- php 文件上传学习
- php 多文件上传
- php请求超过30秒解决方法
- PHP流程控制语句
- php中数组的建立和遍历
- 国内外免费PHP开源建站程序一览
- php的调试级别
- 1.3-测试php解析
- ContentProvider中的数据生成时机
- 题目2:在斐波那契数列中,找出4百万以下的项中值为偶数的项之和。