ContentProvider内容提供器

来源:互联网 发布:软件管理系统发展趋势 编辑:程序博客网 时间:2024/04/20 05:44

    • 内容提供器简介
    • 访问其他程序中的数据
      • 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

读取模拟器中的联系人代码

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就可以了。

0 0
原创粉丝点击