Android 四大组件学习之ContentProvider四
上节我们学习了怎样去读取系统短信以及插入一条短信到系统中。 本节我们学习怎样获取系统的联系人,以及插入一条联系人
好。废话不多说了,直接操作。
首先和读取短信一样,先找到联系人在数据库中的位置。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
然后导出,查看数据库中的内容
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
上图就是怎样到数据库中找打系统的联系人数据,(看起来图画的有点乱,希望能看懂吧)
既然知道怎样能到系统的数据库找到数据。那我们就開始写代码实现吧:
public class ReadContactActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_readcontact);
}
public void readContact(View v)
{
ContentResolver cr = getContentResolver();
/*
* 先到raw_contacts表中拿到contact_id
* content://com.android.contacts/raw_contacts是raw_contacts的訪问url
* */
Cursor contactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
while(contactId.moveToNext())
{
/*
* 拿到contact_id接着到data表中去依据raw_contact_id获取mimetype_id和data1数据
* */
String id = contactId.getString(contactId.getColumnIndex("contact_id"));
/**
* "content://com.android.contacts/data"是訪问data表的url
* 通过id也就是contact_id去data表中找,data1, raw_contact_id, mimetype_id.
* 可是, id就是raw_contact_id,所以就不用再找了。
而mimetype_id因为Android系统为我们自己优化了一些细节。当你在data表中找mimetype_id是找不到的
* android系统直接将mimetype_id转变为找mimetype了
*/
Cursor contactData = cr.query(Uri.parse("content://com.android.contacts/data"),
new String[]{"data1", "mimetype"}, "raw_contact_id = ?", new String[]{id}, null);
String email = null, phone = null, name = null;
while(contactData.moveToNext())
{
String data1 = contactData.getString(contactData.getColumnIndex("data1"));
String mimetype = contactData.getString(contactData.getColumnIndex("mimetype"));
/*假设mimetype是邮箱*/
if("vnd.android.cursor.item/email_v2".equals(mimetype))
{
email = data1;
}//假设mimetype是电话
else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
phone = data1;
}//假设mimetype是名字
else if ("vnd.android.cursor.item/name".equals(mimetype)){
name = data1;
}
}
Log.i("ReadContactActivity", id + ';' + name + ";" + phone + ";" + email);
}
}
}
打印结果为:
上图就是怎样获取联系人的操作。
注意: 读取联系人,短信等信息都须要加上权限的:
既然知道怎样从系统中获取联系人。那就应该会为系统插入一条联系人的记录。
接下来我们实现为系统插入一条联系人记录
Activity的插入的代码:
public void insertContact(View v)
{
ContentResolver cr = getContentResolver();
Cursor cursor = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
/*假设数据库中没有数据,则插入的就是第一条数据*/
int contactId = 1;
if(cursor.moveToLast())
{
/*假设有数据,就插入到最新的写一条*/
int id = cursor.getInt(cursor.getColumnIndex("_id"));
contactId = id + 1;
} ContentValues values = new ContentValues();
/*将新的id插入到raw_contacts表中*/
values.put("contact_id", contactId);
cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values); /*插入名字*/
values.clear();
values.put("data1", "erlangsheng");
values.put("mimetype", "vnd.android.cursor.item/name");
values.put("raw_contact_id", contactId);
cr.insert(Uri.parse("content://com.android.contacts/data"), values); /*插入电话*/
values.clear();
values.put("data1", "00189890");
values.put("mimetype", "vnd.android.cursor.item/phone_v2");
values.put("raw_contact_id", contactId);
cr.insert(Uri.parse("content://com.android.contacts/data"), values); }
}
结果为:
以上就是给联系人插入一条记录。
Android 四大组件学习之ContentProvider四的更多相关文章
- Android 四大组件学习之ContentProvider五
上几节学习了ContentProvider的实际用途,读取短信.插入短信,读取联系人.插入联系人等. 本节课在学习ContentProvider的观察者. 在生活中有第三方的软件.比方什么短信软件.此 ...
- Android 四大组件学习之ContentProvider二
上节学习了什么是ContentProvider.以及ContentProvider的作用.以及什么是URL.本节就对上节学习的知识做一个实践,也就是定义自己的ContentProvider 好.实践是 ...
- Android 四大组件学习之ContentProvider三
上节课学习怎样自己创建一个ContentProvider.以及用ContentResolver去操作ContentProvider. 今天我们用系统提供的ContentProvider. 先来个简单的 ...
- Android 四大组件学习之BroadcastReceiver四
本节学习系统中特殊的广播接收者. 我们前面几节不是说了,当广播接受者一旦注冊到系统中,当系统发送的广播和你注冊的广播的action匹配时,系统就会启动广播接收者所在的进程.除非用户手动停止广播接收者所 ...
- android四大组件学习总结以及各个组件示例(1)
android四大组件分别为activity.service.content provider.broadcast receiver. 一.android四大组件详解 1.activity (1)一个 ...
- Android 四大组件学习之Server一
上次学习了Android四大组件Activity之后,我们深刻理解了Activity.这次我们学习四大组件Service. Service与Activity的级别是一样的,都是Android系统不可缺 ...
- Android 四大组件学习之BroadcastReceiver一
本节课学习四大组件最后一个, 广播接受者. 顾名思义广播接受者就是接受广播呗.比方在现实社会中,曾经每一个人家都有一台收音机,这可就能够去接受广播发出来的消息.大家都知道.程序世界也是參照的显示生活设 ...
- Android四大组件之一:ContentProvider(内容提供者)
Android中还提供了名为ContentProvider(内容提供者),可以向其他应用提供数据,但不常用,除非是同一公司开发的App,可以向不同应用提供数据.虽然为Android的四大组件之一,但用 ...
- android四大组件学习总结以及各个组件示例(2)
上篇博文讲解了activity.content provider,此篇博文来仔细总结service.broadcast receiver: 3. Service >什么是服务?>windo ...
随机推荐
- web前端优化--DOM性能优化
1.DOM访问与修改的优化: DOM访问是有代价的,修改DOM则会引起DOM的重绘与重排,而这两种操作会消耗性能. (1)缓存DOM:将频繁访问的对象或属性使用变量缓存起来,每次访问的时候,直接使用变 ...
- 启动Apache出现问题:一直停留在启动界面
问题描述: 由于需要php_curl模块,因此直接在php.ini文件将前面的分号去掉 ,但是重启Apache时出现:一直停留在启动界面,Apache无法正常启动,查看错误日志,显示如下: 解决方 ...
- XMLHttpRequest2 异步 ajax
XMLHttpRequest1只是对已经存在的xhr对象细节进行规范定义, XMLHttpRequest2升级了该对象. FormData 类型可以用在xhr传输的时候,把表单序列化或者将数据以表 ...
- Scrum Meeting Alpha - 10
Scrum Meeting Alpha - 10 NewTeam 2017/11/06 地点:主楼和3号楼之间的走廊2楼 任务反馈 团队成员 完成任务 计划任务 安万贺 完成了对涉及内容修改的API的 ...
- 将Excel文件数据导入到SqlServer数据库的三种方案
方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server,这种方法的优点是非常的灵活,可以对Excel表中的各个单元格进行用户所需的操作. openFil ...
- ASP.NET Core 2.0 MVC「远程」验证
问题 如何 在ASP.NET Core MVC中使用[Remote]属性来实现模型验证 . 解 在 启动时, 为MVC配置中间件和服务. 添加一个模型. 添加一个控制器. 为jQuery添加一个Raz ...
- java 分页导出百万级数据到excel
最近修改了一个导出员工培训课程的历史记录(一年数据),导出功能本来就有的,不过前台做了时间限制(只能选择一个月时间内的),还有一些必选条件, 导出的数据非常有局限性.心想:为什么要做出这么多条件限制呢 ...
- asp.net web api 文件上传
1正确的做法 public class AvaterController : BaseApiController { [HttpPost] public async Task<IHttpActi ...
- [转载] Java并发编程:Lock
转载自http://www.cnblogs.com/dolphin0520/p/3923167.html 以下是本文目录大纲: 一.synchronized的缺陷 二.java.util.concur ...
- [转载] 基于Dubbo的Hessian协议实现远程调用
转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行 ...