结果图:
加权限:
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
主逻辑代码文件:
<span style="font-size:18px;">package com.example.day15_contentresolvercontacts;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.CommonDataKinds.StructuredName;
import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.RawContacts;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
public class MainActivity extends Activity {
/**
* 演示通过conentresolver访问系统的联系人
*
* ContactsContract.Contacts.CONTENT_URI 管理联系人的Uri
* content://com.android.contacts/raw_contacts
*
* ContactsContract.CommonDataKinds.Phone.CONTENT_URI 管理联系人的电话的Uri
* content://com.android.contacts/data/phones
*
* ContactsContract.CommonDataKinds.Email.CONTENT_URI 管理联系人的Email的Uri
* content://com.android.contacts/data/emails
*
* android.provider.ContactsContract.Data.CONTENT_URI 插入联系人
* content://com.android.contacts/data
*/
ListView lv;
List<Map<String,Object>> list;
ContentResolver cr;
String name;//获取长点击的item中的姓名用于删除时的参数
//联系人uri对象
Uri contact_uri=ContactsContract.Contacts.CONTENT_URI;
//管理联系人电话的uri
Uri phone_uri=ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
//管理联系人邮箱的uri
Uri email_uri=ContactsContract.CommonDataKinds.Email.CONTENT_URI;
//插入联系人的uri
Uri doUri=android.provider.ContactsContract.Data.CONTENT_URI;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv=(ListView) findViewById(R.id.lv);
cr=getContentResolver();
Cursor c=cr.query(contact_uri, null, null, null, null);
SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(), getData(c), R.layout.style,new String[]{"p_name","p_num","p_email"},new int[]{R.id.tv_name,R.id.tv_num,R.id.tv_email});
lv.setAdapter(adapter);
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
name=(String) list.get(arg2).get("p_name");
//Toast.makeText(getApplicationContext(), name, 0).show();
return true;
}
});
}
public List<Map<String,Object>> getData(Cursor c)
{
list=new ArrayList<Map<String,Object>>();
while(c.moveToNext())
{
Map<String,Object> map=new HashMap<String,Object>();
//获取联系人的id和姓名
int contact_id=c.getInt(c.getColumnIndex(ContactsContract.Contacts._ID));
String contact_name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
map.put("p_id",contact_id);
map.put("p_name",contact_name);
//查询电话号
Cursor c_phone=cr.query(phone_uri, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"=?", new String[]{contact_id+""}, null);
while(c_phone.moveToNext())
{
String contact_num=c_phone.getString(c_phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
map.put("p_num", contact_num);
}
c_phone.close();
//查询邮箱
Cursor c_email=cr.query(email_uri, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID+"=?",new String[]{contact_id+""}, null);
while(c_email.moveToNext())
{
String contact_email=c_email.getString(c_email.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
map.put("p_email", contact_email);
}
c_email.close();
list.add(map);
}
c.close();
return list;
}
public void click(View v)
{
switch(v.getId())
{
case R.id.add:
//插入一条空的数据,为了得到id
ContentValues value=new ContentValues();
Uri newUri=cr.insert(RawContacts.CONTENT_URI, value);
long contactsId=ContentUris.parseId(newUri);
//插入联系人姓名
value=new ContentValues();
value.put(Data.RAW_CONTACT_ID, contactsId);
//存储的数据类型,联系人类型
value.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
//插入名称
value.put(StructuredName.DISPLAY_NAME, "李易峰");
cr.insert(doUri, value);
//插入电话号
value=new ContentValues();
value.put(Data.RAW_CONTACT_ID, contactsId);
//插入电话号的数据类型
value=new ContentValues();
value.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
cr.insert(doUri, value);
//插入邮箱
value=new ContentValues();
value.put(Data.RAW_CONTACT_ID, contactsId);
//插入邮箱的数据类型
value.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
value.put(Email.DATA, "123456789@qq.com");
cr.insert(doUri, value);
break;
case R.id.update:
ContentValues values=new ContentValues();
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, "10086");
cr.update(doUri, values, ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID+"=?and mimetype_id=?", new String[]{"1","5"});
break;
case R.id.delete:
int z=cr.delete(RawContacts.CONTENT_URI, "display_name = ?", new String[]{name});
if(z>0)
{
Toast.makeText(getApplicationContext(), "删除成功", 0).show();
}
else
{
Toast.makeText(getApplicationContext(), "删除失败", 0).show();
}
break;
}
}
}
</span>
主布局文件:
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_alignParentBottom="true"
android:gravity="center">
<Button
android:id="@+id/add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="添加"/>
<Button
android:id="@+id/update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="修改"/>
<Button
android:id="@+id/delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="click"
android:text="删除"/>
</LinearLayout>
</RelativeLayout>
</span>
适配器布局文件:
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:id="@+id/tv_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:id="@+id/tv_num"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="邮箱: "
android:layout_marginLeft="5dp"/>
<TextView
android:id="@+id/tv_email"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
</LinearLayout>
</span>