标签:android开发

public class ContactProviderTest extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button search=(Button)findViewById(R.id.searchBtn);
/*查询联系人*/
search.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//1.定义两个List来封装系统的联系人信息,指定联系人的电话号码、Email等详情
final ArrayList<String> names=new ArrayList<String>();
final ArrayList<ArrayList<String>> details=new ArrayList<ArrayList<String>>();
//2.使用ContentResolver查找联系人数据(Query the given URI, returning a Cursor over the result set)
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
//3.遍历查询结果,获取系统中所有联系人
while(cursor.moveToNext())
{
//a.获取联系人ID
String contactId=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
//b.获取联系人的名字
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
names.add(name); //将名字依次添加到List列表中
/*-----------------------------------------------------------------------------------------------------*/
//c.使用ContentResolver查找联系人的电话号码
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId, null, null);
//d.遍历查询结果,获取该联系人的多个电话号码
ArrayList<String> detail = new ArrayList<String>();
while(phones.moveToNext())
{
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
detail.add("电话号码"+phoneNumber);
}
phones.close();
/*-----------------------------------------------------------------------------------------------------*/
//e.使用ContentResolver查找联系人的E-Mail地址
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+contactId, null, null);
//f.遍历查询结果,获取该联系人的多个E-Mail地址
while(emails.moveToNext())
{
String emailAddress = emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
detail.add("邮件地址:"+emailAddress);
}
emails.close();
details.add(detail);
}
cursor.close();
/*-----------------------------------------------------------------------------------------------------*/
//4.加载result.xml
View resultDialog = getLayoutInflater().inflate(R.layout.result, null);
//5.获取resultDialog中ID为list的ExpandableListView
ExpandableListView list = (ExpandableListView) resultDialog.findViewById(R.id.list);
//6.创建一个ExpandableListAdapter对象
ExpandableListAdapter adapter = new BaseExpandableListAdapter()
{
//a.获取指定组位置、指定子列表项处的子列表项数据
@Override
public Object getChild(int groupPosition, int childPosition) {
return details.get(groupPosition).get(childPosition);
}
@Override
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
public int getChildrenCount(int groupPosition) {
return details.get(groupPosition).size();
}
private TextView getTextView()
{
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 64);
TextView textView = new TextView(ContactProviderTest.this);
textView.setLayoutParams(lp);
textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.LEFT);
textView.setPadding(36, 0, 0, 0);
textView.setTextSize(20);
return textView;
}
//b.该方法决定每个子选项的外观
@Override
public View getChildView(int groupPosition,
int childPosition, boolean isLastChild,
View convertView, ViewGroup parent)
{
TextView textView = getTextView();
textView.setText(getChild(groupPosition,childPosition).toString());
return textView;
}
//c.获取指定组位置处的组数据
@Override
public Object getGroup(int groupPosition) {
return names.get(groupPosition);
}
@Override
public int getGroupCount() {
return names.size();
}
@Override
public long getGroupId(int groupPosition) {
return groupPosition;
}
//d.该方法决定每个组选项的外观
@Override
public View getGroupView(int groupPosition,
boolean isExpanded, View convertView,
ViewGroup parent) {
TextView textView = getTextView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
@Override
public boolean isChildSelectable(int groupPosition,
int childPosition) {
return true;
}
@Override
public boolean hasStableIds() {
return true;
}
};
//7.为ExpandableListView设置Adapter对象
list.setAdapter(adapter);
//8.使用对话框来显示查询结果
new AlertDialog.Builder(ContactProviderTest.this)
.setView(resultDialog)
.setPositiveButton("确定",null)
.show();
}
});
/*添加联系人*/
Button add=(Button)findViewById(R.id.addBtn);
add.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//a.获取程序界面中的三个文本框
String name = ((EditText)findViewById(R.id.name)).getText().toString();
String phone = ((EditText)findViewById(R.id.phone)).getText().toString();
String email = ((EditText)findViewById(R.id.email)).getText().toString();
//b.创建一个空的ContentValues
ContentValues values = new ContentValues();
//c.向RawContacts.CONTENT_URI执行一个空值插入吗,目的是获取系统返回的rawContactId
Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values);
long rawContactId=ContentUris.parseId(rawContactUri);
values.clear();
/*-----------------------------------------------------*/
values.put(Data.RAW_CONTACT_ID, rawContactId);
//d.设置内容类型
values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
//e.设置联系人名字
values.put(StructuredName.GIVEN_NAME, name);
//f.向联系人URI添加联系人名字
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();
/*-----------------------------------------------------*/
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
//g.设置联系人的电话号码
values.put(Phone.NUMBER, phone);
//h.设置电话类型
values.put(Phone.TYPE, Phone.TYPE_MOBILE);
//i.向联系人电话号码URI添加电话号码
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
values.clear();
/*-----------------------------------------------------*/
values.put(Data.RAW_CONTACT_ID, rawContactId);
values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
//j.设置联系人的E-mail地址
values.put(Email.DATA, email);
//k.设置该电子邮件的类型
values.put(Email.TYPE, Email.TYPE_WORK);
//l.向联系人E-mail URI添加E-mail数据
getContentResolver().insert(android.provider.ContactsContract.Data.CONTENT_URI, values);
Toast.makeText(ContactProviderTest.this,"联系人数据添加成功", Toast.LENGTH_SHORT).show();
}
});
}
}
Android学习笔记二十一.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider
标签:android开发
原文地址:http://blog.csdn.net/u012637501/article/details/42713299