首页文章Android四大组件-ContentProvider手机号查询机主姓名「Android四大组件-ContentProvider」

Android四大组件-ContentProvider手机号查询机主姓名「Android四大组件-ContentProvider」

时间2025-01-17 07:20:46发布yu分类文章浏览137
导读:ContentProvider简介: 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而...

ContentProvider简介:
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
Uri类简介
Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。
2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
• 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
• 要操作contact表中id为10的记录的name字段, contact/10/name
• 要操作contact表中的所有记录,可以构建这样的路径:/contact

本篇主要围绕通话记录和联系人讲解ContentProvider的使用。

首先来了解一下通话记录和联系人的表结构。
这是手机中部分表:
这里写图片描述
通话记录在calls表中,联系人表主要有三个:raw_contacts、data、mimetype表。
–联系人记录
–存放联系人信息的表(注意表结构):
联系人信息表:raw_contacts
–_id
–display_name联系人名称

联系人数据表:data
–_id
–raw_contact_id(外键,raw_contacts表的_id)
–data1
–data2
–mimetype_id(数据类型,如电话,邮箱,地址 外键(mimeypes))

数据类型表:mimeypes
–_id
–mimetype
这里写图片描述
数据类型表中需要注意的是name、phone_v2、email_v2字段,对应id是7、5、1;


1)定义ContentProvieder组件提供的内容的Uri接口
2)定义被访问的表中的字段
3)添加访问权限

简单使用1:查询最近联系人记录

简单使用2:查询手机联系人,然后执行增删改操作
需要了解联系人数据库中有哪些表及表的结构:通过adb shell可以查看。
–联系人记录
–存放联系人信息的表(注意表结构):
联系人信息表:raw_contacts
–_id
–display_name联系人名称
联系人数据表:data
–_id
–raw_contact_id(外键,raw_contacts表的_id)
–data1:电话、邮箱、姓名等信息
–data2
–mimetype_id(数据类型,如电话,邮箱,地址 外键(mimeypes))
数据类型表:mimeypes
–_id
–mimetype
– mimetype_id=1:邮箱
– mimetype_id=5:电话
– mimetype_id=7:姓名

—>增删该查操作都是第一步得到ContentResolver操作对象,第二步执行已经定义好的方法。

2.1添加联系人:
// 向联系人表raw_contacts中添加新的联系人信息

这个方法值得注意的是返回的是一个uri,也就是新增的这条数据的uri,如果想得到该条记录的id可以调用这个方法:
long _id = ContentUris.parseId(datasUri);

–姓名:
value.put(“data1”, name);
value.put(“mimetype”,”vnd.android.cursor.item/name”);
–电话:
value.put(“data1”, phone);
value.put(“mimetype”,”vnd.android.cursor.item/phone_v2”);
–邮件:
value.put(“data1”, email);
value.put(“mimetype”,”vnd.android.cursor.item/email_v2”);

2.2删除联系人:都是很简单的操作
// 再从联系人表中删除信息


getContentResolver().delete(contactUri, “_id=” + id,null);

2.3修改联系人:

2.4查询所有联系人

1.步骤:
1)声明该contentProvider的唯一标识,通常使用包名加数据库名,必须小写
2)为该组件中可以被外界访问的数据库中的资源定义Code标识,不对外界开放的不用定义
3)定义访问资源的Uri的匹配器对象–使用该类生成被访问的资源的Uri
4)UriMatcher添加访问uri
5)清单文件中注册组件 name authorities
6)声明访问该组件的权限
7)重写provider的增删改查方法

2.实现
1)自定义数据库

2)按上述步骤定义ContentProvider

3)清单文件中注册内容提供器

注意:还需要添加访问该provider的权限和修改的操作权限,否则其他程序不能访问或操作

4)在其他程序中使用
和上面使用类似,不赘述了。

德清版权声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕,E-mail:xinmeigg88@163.com

展开全文READ MORE
组件查询机手机号
Google翻译简介 Google翻译好用吗→MAIGOO百科安卓手机刷机软件「Google翻译简介 Google翻译好用吗→MAIGOO百科」 小米9怎么投屏,小米手机9支不支持有线投屏?小米手机怎么投屏到电视「小米9怎么投屏,小米手机9支不支持有线投屏?」