Android内容提供者ContentProvider之getContentResolver(篇一)

内容提供者的好写的内容比较多,所以分为两章节来写。篇一主要讲如何使用现有的内容提供器来读取和操作相应程序中的数据,也就是getContentResolver。内容可以参考《第一行代码》一起服用效果更佳。学习内容的记录。

一、简介

Content Provider:

主要用于不同程序之间实现数据共享功能,它提供一套完整的机制,允许一个程序访问另外一个程序的数据,同时还保证了数据的安全性。

内容提供者分为两种:

1.使用现有的内容提供器来读取和操作相应程序中的数据(篇目一)

2.创建自己的内容提供器给我们程序的数据提供外部访问的接口

二、ContentResolver的基本用法

对于一个每一个应用程序来说,如果想访问内容提供者的共享数据,一定要借助getContentResolver类,通过Context中的getContentResolver()来获取该类的实例。getContentResolver中提供了一系列方法对数据的CRUD操作如 insert(),update()

delete(),query()。

查询为例

参数uri:是一个对象  有sql的基础应该很容易看懂

Uri uri = Uri.parse("content://com.example.contentprovidertest.provider/book");
//com.example.contentprovidertest  要访问app的路径     book  数据  

 三、ContentResolver的使用之访问电话簿

public class MainActivity extends AppCompatActivity {
    ArrayAdapter<String> adapter;
    List<String> contactsList = new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView contactsView =findViewById(R.id.contacts_view);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,contactsList);
        contactsView.setAdapter(adapter);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_CONTACTS},1);//讯问是否允许权限
        }else{
            readContacts();   //用户授权之后

        }
    }
    private void readContacts(){
        Cursor cursor = null;
        try {
            //查询电话联系人的数据
            /**
             * ContactsContract.CommonDataKinds.Phone类已经帮我们封装好了    电话位置就在CONTENT_URI
             * ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME   联系人对于的常量
             * */
            cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);  //访问
            if (cursor != null){
                while (cursor.moveToNext()){
                    //获取练习人姓名
                    @SuppressLint("Range") String displayname = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    //获取手机号
                    @SuppressLint("Range") String number= cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    contactsList.add(displayname+"\n"+number);
                }
                adapter.notifyDataSetChanged();
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if (cursor!=null){
                cursor.close();
            }
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode){
            case 1:
                if (grantResults.length>0&&grantResults[0]==PackageManager.PERMISSION_GRANTED){
                    readContacts();
                }else {
                    Toast.makeText(this, "不允许", Toast.LENGTH_SHORT).show();

                }
                break;
            default:
        }
    }
}

最后记得添加权限

<uses-permission android:name="android.permission.READ_CONTACTS"/>
    

这样子就可以访问到数据了


总结

介绍了Android内容提供者ContentProvider之getContentResolver的用法。

tip:  这只是我的一家之言,有错误的地方欢迎指正。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值