- 浏览: 127724 次
- 性别:
- 来自: 九江
文章分类
最新评论
-
chenbo58:
mark一下
SQLite 函数大全 -
hm910705:
我觉得你的那个julianday是不是写错了,是将u写成了o, ...
SQLite 函数大全 -
jiguansheng:
费思量 写道你好,我按照第一种方式,为何进不了系统相机,摄像头 ...
Android 相机实例(一) -
费思量:
你好,我按照第一种方式,为何进不了系统相机,摄像头根本不开起, ...
Android 相机实例(一) -
xblia:
RelativeLayout 用了一会
package wjh.android.contact;
import java.util.ArrayList;
import android.content.ContentProviderOperation;
import android.content.ContentProviderResult;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.provider.ContactsContract.RawContacts;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Contacts.Data;
import android.test.AndroidTestCase;
import android.util.Log;
/**
* 通讯录操作示例
*
*/
public class ContactTest extends AndroidTestCase {
private static final String TAG = "ContactTest";
/**
* 获取通讯录中所有的联系人
*/
public void testGetContacts() throws Throwable {
ContentResolver contentResolver = this.getContext().getContentResolver();
String uriStr = "content://com.android.contacts/contacts";
Uri uri = Uri.parse(uriStr);
Cursor cursor = contentResolver.query(uri, null, null, null, null);
// 遍历联系人
while (cursor.moveToNext()) {
// 联系人 ID
int contactId = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID));
// 联系人显示名称
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
// 联系人电话号码需要对另一个表进行查询,所以用到另一个 uri:content://com.android.contacts/data/phones
Cursor phones = getContext().getContentResolver().query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " // 根据上一步获取的联系人 id 来查询
+ contactId, null, null);
String phone = "";
while (phones.moveToNext()) {
// "data1"字段,所以此处也可以直接写 "data1",但不推荐
phone = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
// 再查询 Email。uri 为 : content://com.android.contacts/data/emails
Cursor emails = getContext().getContentResolver().query(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = "
+ contactId, null, null);
while (emails.moveToNext()) {
/* 一样是 "data1" 字段。现在明白了吧?一个联系人的信息,其实被分成了好几条记录来保存,data1分别保存了各种重要的信息。
* 是时候参照打开数据库我前面所说,去瞄一眼它的表结构了!
*/
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
Log.i("RongActivity", "emailAddress=" + emailAddress);
}
emails.close();
Log.i(TAG, "Contact [contactId= "+ contactId +"name=" + name + ", phone=" + phone + "]");
}
}
/**
* 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
* 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
*/
public void testInsert() {
ContentValues values = new ContentValues();
//首先向RawContacts.CONTENT_URI执行一个空值插入(raw_contacts 表), 为了获取生成的联系人 ID
Uri rawContactUri = this.getContext().getContentResolver().insert(RawContacts.CONTENT_URI, values);
//然后获取系统返回的rawContactId , 就是新加入的这个联系人的 ID
long rawContactId = ContentUris.parseId(rawContactUri);
/* Andorid 中,将联系人的姓名、电话、Email
* 分别存放在 data 表的同一个字段的三条记录当中
* 因此要 Insert 三次 */
//往data表入姓名数据
values.clear();
// raw_contacts_id 字段,是 raw_contacts表id 的外键,用于说明此记录属于哪一个联系人
values.put(Data.RAW_CONTACT_ID, rawContactId);
// mimitype_id 字段,用于描述此数据的类型,电话号码?Email?....
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE); // 注意查看第二个参数的常量值
values.put(StructuredName.GIVEN_NAME, "文白菜"); // 这个名字真好听
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入电话数据
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(Phone.NUMBER, "15101689230");
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
//往data表入Email数据
values.clear();
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
values.put(Email.DATA, "wenlin56@sina.com");
values.put(Email.TYPE, Email.TYPE_WORK);
this.getContext().getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
}
/**
* 在同一个事务当中保存联系人
*/
public void testSave() throws Throwable{
//文档位置:reference/android/provider/ContactsContract.RawContacts.html
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, null)
.withValue(RawContacts.ACCOUNT_NAME, null)
.build());
//文档位置:reference/android/provider/ContactsContract.Data.html
ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
.withValue(StructuredName.GIVEN_NAME, "文萝卜")
.build());
// 更新手机号码:Data.RAW_CONTACT_ID 获取上一条语句插入联系人时产生的 ID
ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE)
.withValue(Phone.NUMBER, "15101689231") // "data1"
.withValue(Phone.TYPE, Phone.TYPE_MOBILE)
.withValue(Phone.LABEL, "手机号")
.build());
ops.add(ContentProviderOperation.newInsert(android.provider.ContactsContract.Data.CONTENT_URI)
.withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex)
.withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE)
.withValue(Email.DATA, "wenlin56@yahoo.cn")
.withValue(Email.TYPE, Email.TYPE_WORK)
.build());
// 批量插入 -- 在同一个事务当中
ContentProviderResult[] results = this.getContext().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
for(ContentProviderResult result : results){
Log.i(TAG, result.uri.toString());
}
}
}
发表评论
-
自定义Action
2012-05-28 14:19 715一个action就是一个字符串,什么名字都无所谓。 自 ... -
Android横竖屏切换总结
2012-05-21 15:09 992Android横竖屏要解决的问题应该就两个: 一.布局 ... -
判断手机是否已经连接上网络
2012-03-16 13:59 1136ConnectivityManager cwjManager ... -
从你的应用程序返回桌面
2012-02-29 13:31 1216public boolean onKeyDown(int ... -
隐藏输入法
2012-02-22 12:10 924private void hideIM(View edt ... -
Bad request for field slot 0,-1.错误
2012-02-07 18:19 2430SQLiteQueryBuilder queryBuil ... -
彻底关闭应用程序 要点
2011-11-01 15:02 877根据Activity的声明周期 我们知道And ... -
android 检查gps
2011-10-31 11:56 850//检查GPS模块是否开启 public void ... -
Android中的Intent详细讲解
2011-10-26 17:57 972在一个Android应用中, ... -
Android API:Activity.managedQuery()
2011-10-26 17:28 1069描述: 获取一个包含指定数据的 Cursor 对象,并 ... -
android 小部件 AndroidManifest.xml
2011-10-26 16:55 817<receiver android:name=" ... -
状态栏Notification通知
2011-10-26 11:35 935package com.pocketdigi.Notif ... -
android学习之wifimanager
2011-10-21 14:11 2008import java.util.List; i ... -
android 拍照后保存图片(2) onActivityResult
2011-10-21 13:32 3095protected void onActivityRes ... -
android 调用相机保存拍照后的图片
2011-10-21 11:31 1664Intent intent = new Inten ... -
Android有效解决加载大图片时内存溢出的问题
2011-10-20 22:17 1609尽量不要使用setImageBitmap或setImageRe ... -
Android 相机实例(一)
2011-10-20 17:53 5210在android中应用相机功能,一般有两种:一种是直接调 ... -
获得 android 通讯薄 中的内容
2011-10-20 16:21 894//得到ContentResolver对 ... -
android drawable bitmap
2011-10-18 17:40 1072android在处理一写图片资源的时候,会进行一些类型的转 ... -
Android 实现联网(三)——在线程中联网
2011-10-17 11:11 849在前面的关于Java I/O的学习中,有一个我们 ...
相关推荐
本文将详细介绍一个基于Android 2.2版本的通讯录操作示例源代码。该代码实现了读取、添加、删除以及更新联系人的功能。对于学习Android平台上的通讯录操作来说,这是一个很好的实践案例。 #### 二、关键类与接口 1...
在Android平台上,构建一个简易通讯录是一个常见的应用场景,它涉及到数据存储、用户界面以及数据管理等方面。本项目采用SQLite作为数据库管理系统,SQLite是一款轻量级的、嵌入式的、关系型数据库,尤其适合于移动...
"通讯录 示例"这个项目,根据其标题和描述,似乎是一个演示性的应用或代码库,旨在展示如何实现通讯录的基本功能,包括备份数据、还原数据、更新联系人信息以及查找联系人等。以下是对这些功能的详细解释: 1. **...
总之,“基于vc++的MFC个人通讯录示例”是一个涵盖了MFC基础、数据库操作、用户交互等多方面技能的综合实践项目。通过学习这个示例,开发者可以深入理解MFC的机制,并具备开发类似桌面应用的能力。在实际开发过程中...
在本示例中,我们探讨的是一个使用C++语言编写的通讯录应用程序,该程序是在Visual Studio C++环境中开发的。C++是一种强大的、面向对象的编程语言,它结合了低级内存管理的能力与高级抽象概念,使得开发者可以创建...
本实例“数据库操作(通讯录)”为我们提供了一个具体的应用场景,即如何利用数据库技术管理个人或组织的通讯录信息。通讯录是一个常见的应用,它涉及到对人名、电话号码、电子邮件地址等个人信息的存储、检索和管理...
首先,关于“源码”,这可能意味着博主分享了与iPhone通讯录操作相关的代码示例或自定义解决方案。在iOS开发中,我们通常会用到苹果提供的Contacts框架(Contacts.framework)来访问和管理用户的联系人。开发者可以...
【简单的通讯录代码】是一个基于Java技术实现的通讯录应用示例,主要涉及了Java编程基础和数据库操作,特别是使用了Java Database Connectivity (JDBC) API来与数据库进行交互。这个通讯录系统能够帮助用户存储、...
《个人通讯录管理系统课程设计报告》是一份详细阐述如何利用C语言开发个人通讯录管理系统的实践报告。该报告由XX科技学院电子信息工程学院的一名学生完成,旨在通过设计和实现这个系统,提升C语言编程技能,理解结构...
`ZHContactManager` 是一个专为Swift开发者设计的库,它简化了与iOS系统通讯录(Contacts框架)的交互,使得进行如选择联系人、创建新联系人以及将联系人添加到现有联系人等操作变得更为便捷。在这个项目中,我们...
#### 三、代码示例解析 以下是对部分代码片段的分析: ```c void Add(void) { p1 = (struct contactor *)malloc(LEN); ``` 此段代码用于分配内存空间以存储新的联系人信息。`LEN` 是预先定义好的结构体大小。这里...
8. **异步操作**:为了保证UI的流畅性,通常在后台线程(如AsyncTask)中执行耗时的通讯录操作。 9. **UI设计**:使用RecyclerView展示联系人列表,可实现高效的滚动和复用视图。每个联系人条目可能包括姓名、电话...
本示例"多用户远程访问Access数据库--通讯录示例(VB+ASP+ACCE)"展示了一个多用户可以同时操作的远程数据库系统,这突破了Access数据库通常只在局域网内使用的局限。以下将详细解释这个系统的组成部分和相关技术知识...
本项目"安卓ContentResolver操作通讯录demo"是一个实战示例,展示了如何通过ContentResolver对安卓设备的通讯录进行增删改查的基本操作,并包含一个简单的欢迎界面。 首先,了解ContentResolver的基本使用。在...
3. 示例代码:可能包含了一些示例代码,演示如何使用这个封装库来操作通讯录,这对于开发者快速上手非常有帮助。 在实际使用中,开发者可以这样操作通讯录: ```objc #import "SLAddressBook.h" SLAddressBook *...
【基于VFP的通讯录系统】是一个利用Visual FoxPro(VFP)开发的管理软件,主要功能是管理和...它通过直观的用户界面和完善的数据库操作,为用户提供了方便的信息存储和检索方式,是VFP技术在实际应用中的一个典型示例。
在本实例中,我们将深入探讨如何使用XML进行基本操作,特别是在构建一个简单的通讯录应用中的应用。这个通讯录示例可能没有华丽的界面,但它为初学者提供了关于XML实际应用的宝贵经验。 1. **XML结构基础**: XML...
【VB简易通讯录:数据写入操作详解】 在信息技术领域,Visual Basic(VB)是一种流行的编程语言,尤其适合初学者入门。本项目“VB简易的通讯录”旨在帮助学习者理解如何利用VB进行数据写入操作,从而创建一个简单的...
这个名为"ASP.NET通讯录.rar"的压缩包文件很可能包含了一个使用ASP.NET技术实现的通讯录应用示例,旨在帮助开发者理解如何在实际项目中运用ASP.NET。 在ASP.NET中,你可以使用C#或VB.NET作为编程语言,通过.NET ...