博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 内容提供者ContentProvider
阅读量:6220 次
发布时间:2019-06-21

本文共 2250 字,大约阅读时间需要 7 分钟。

  hot3.png

ContentProvider    ——>    ContentResolver

    内容提供者           URI          内容访问者

URI:统一资源标识符    //URL(是URI的一种):统一资源定位符

注册ContentProvider:

    name:全路径

    authorities:认证,Uri的一部分,name的小写        //    uri = Uri.parse("content://" + AUTHORITY);

    exported:能否让别的应用程序访问当前程序的数据

1.ContentResolver:

a.获取通话记录    权限:READ_CALL_LOG

    Uri uri = CallLog.Calls.CONTENT_URI;    //    Uri.parse("content://call_log/calls")

    private ContentResolver resolver;

    resolver = getContentResolver();

    String[] projection = new String{

        CallLog.Calls._ID,                        //"_id"

        CallLog.Calls.CACHED_NAME,    //"name"

        CallLog.Calls.NUMBER,               //"number"

        CallLog.Calls.TYPE,                     //"type"

        CallLog.Calls.DATE                     //"date"

    };

    Cursor cursor = resolver.query(uri,projection,null,null,null);

b.获取短信记录    权限:READ_SMS

    Uri uri = Sms.CONTENT_URI;    //    Uri.parse("content://sms")

    String[] projection = new String[]{

        Sms.Draft._ID,                //"_id"

        Sms.Draft.ADDRESS,      //"address"

        Sms.Draft.BODY,            //"body"

        Sms.Draft.TYPE              //"type"

    };

    SimpleCursorAdapter()中from为projection

c.联系人    权限:READ_CONTACTS、WRITE_CONTACTS

  两张表    View_raw_contacts、View_data(在data/data/com.android.contacts/database/contact2.db数据库中)

    Uri rawUri = ContactsContract.RAWContacts.CONTENT_URI;    //    Uri.parse("content://com.android.contacts/raw_contacts")

    Uri dataUri = ContactsContract.Data.CONTENT_URI;    //    Uri.parse("content://com.android.contacts/data")

    Cursor rawCursor = resolver.query(rawUri, new String[]{"_id","contact_id",null,null,null});

    while(rawCursor.moveToNext()){

        String contact_id = rawCursor.getString(rawCursor.getColumnIndex("contact_id"));

        Cursor dataCursor = resolver.query(dataUri,

                                                               new String[]{""_id,"data1","mimtype"},

                                                               "raw_contact_id=?",

                                                                new String[]{contact_id},

                                                                null);

        while(dataCursor.moveToNext()){

            String mimetype = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));

            String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));

            if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {

                Log.i("info","联系人ID:" + contact_id + ",电话:" + data1);
            } else if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
                Log.i("info",""联系人ID:" + contact_id + ",email:" + data1);
            } else if ("vnd.android.cursor.item/name".equals(mimetype)) {
                Log.i("info",""联系人ID:" + contact_id + ",联系人姓名:" + data1);
            }

        }

    }

    不能用SimpleCursorAdapter

2.Android四大组件之ContentProvider

   

转载于:https://my.oschina.net/glfei/blog/3025811

你可能感兴趣的文章
新手选择使用 Linux 桌面的七个注意点
查看>>
进程的优先级 与 CFS 进程调度
查看>>
开源爬虫Labin,Nutch,Neritrix介绍和对比
查看>>
使用ASP.Net WebAPI构建REST服务(六)——Self-Host
查看>>
实例演示如何使用AgileEAS.NET SOA平台工作流进行业务流程自定义
查看>>
结合Spring发送邮件的四种正确姿势,你知道几种?
查看>>
使用钉钉通知你的 Laravel 框架系统异常
查看>>
【译】Vue 的小奇技(第一篇):提高大型数据列表的性能
查看>>
android中compileSdkVersion、minSdkVersion、targetSdkVersion 的选择
查看>>
0224 - 技术的道与术
查看>>
小哥哥~手把手教你如何绘制一辆会跑车
查看>>
【webpack进阶】使用babel避免webpack编译运行时模块依赖
查看>>
如何应对线上的偶现问题
查看>>
程序员你为什么这么累【续】:编码习惯之Controller规范
查看>>
【火炉炼AI】深度学习001-神经网络的基本单元-感知器
查看>>
主成分分析(PCA)
查看>>
小程序前端制作-我的
查看>>
你不知道的的 iOS 多线程
查看>>
Swift 线程安全数组
查看>>
坑系列 —— 缓存 + 哈希 = 高并发?
查看>>