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 ...
随机推荐
- vue实现仿淘宝结账页面
这个demo,是小颖基于之前的 vue2.0在table中实现全选和反选 文章进行更新后的demo,主要功能呢,是仿照淘宝页面的结算购物车商品时自动算出合计价格的页面,具体页面效果请看下面的动图: ...
- Python爬虫入门:Urllib库的高级使用
1.设置Headers 有些网站不会同意程序直接用上面的方式进行访问,如果识别有问题,那么站点根本不会响应,所以为了完全模拟浏览器的工作,我们需要设置一些Headers 的属性. 首先,打开我们的浏览 ...
- vue-cli 前端开发,后台接口跨域代理调试问题
使用 webpack的方式开发的时候,前台开发过程中需要调用很多后台的数据接口,但是通常前后台分离的开发方式,后台的接口数据很可能是不方便或者是不能在前端同学的电脑上运行的,也就出现了所谓的跨域问题. ...
- C#生成缩略图源码
先看调用的方法: ).ToUpper()) { case "JPG": ...
- C#中制作MDI窗体
在VB中做 MDI窗体很简单.在C#里就没有这个轻松了,不过还是很方便的. 首先在C#里添加一个窗体,命名为MdiMain,将其IsMdiContainer设定成true,这样MDI主窗体就建立了.然 ...
- 10个鲜为人知的C#关键字
在正式开始之前,我需要先声明:这些关键字对于偏向底层的程序员更加耳熟能详,对这些关键字不了解并不影响你作为一个合格的程序员. 这意味着这些关键字会让你在编写程序时得到更好的代码质量和可读性,enjoy ...
- 设计模式的征途—10.装饰(Decorator)模式
虽然目前房价依旧很高,就连我所在的成都郊区(非中心城区)的房价均价都早已破万,但却还是阻挡不了大家对新房的渴望和买房的热情.如果大家买的是清水房,那么无疑还有一项艰巨的任务在等着大家,那就是装修.对新 ...
- 编程语言 : Java的动态Web解决方案泛谈
文章概述 最近发现很久前一股脑地学习框架,发觉越发迷糊.知道了框架只是暂时的,重点是基础的技术.该文大篇幅回顾Servlet技术栈和简要的MVC框架. 至于为什么学J2EE,额,大家都用框架,可框架也 ...
- Django 入门案例开发(下)——创建项目应用及模型类
前面两章是在已经开发好的项目上用来描述环境和业务,这一章创建一个全新的项目来用作开发,你可以跟着我的步骤进行开发,如果有不理解的地方可以给我留言. 今天的任务是创建好项目和用户(users)应用及让它 ...
- HTML5浏览器端图片预览&生成Base64
本文主要介绍如何通过拖拽方式在浏览器端实现图片预览,并生成图片的Base64编码. 工具链接:图片转Base64. 首先介绍一下FileReader, FileReader对象允许浏览器使用File或 ...