现在的位置: 首页 > 综合 > 正文

使用ContentProvider查看所有的联系人

2013年08月27日 ⁄ 综合 ⁄ 共 5484字 ⁄ 字号 评论关闭

由于代码上注释写的很清楚,可以直接运行成功。所以我就不说什么了,这个例子是疯狂android讲义上的范例,大家有书的可以看看,那本书挺不错的。ContentProvider是很重要的,但是一般不做系统级开发的不会涉及到,我纯粹是为了练习使用它。

package com.example.democontent;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class MainActivity extends Activity {

	private Button button;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button = (Button) findViewById(R.id.button1);
		button.setOnClickListener(new OnClickListener() {
			public void onClick(View arg0) {
				allContants();
			}
		});
	}

	private void allContants() {
		final ArrayList<String> names = new ArrayList<String>();
		final ArrayList<ArrayList<String>> details = new ArrayList<ArrayList<String>>();
		Cursor cursor = getContentResolver().query(
				ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
		while (cursor.moveToNext()) {
			// 联系人的id
			String contactId = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts._ID));
			// 联系人的姓名
			String name = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
			names.add(name);
			// 联系人的多个电话
			Cursor phones = getContentResolver().query(
					ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
					null,
					ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
							+ contactId, null, null);
			ArrayList<String> detail = new ArrayList<String>();
			// 遍历插叙结果获取该联系人的多个电话号码
			while (phones.moveToNext()) {
				String phoneNumber = phones
						.getString(phones
								.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
				detail.add("电话号码:" + phoneNumber);
			}
			phones.close();
			// 查找email
			Cursor emails = getContentResolver().query(
					ContactsContract.CommonDataKinds.Email.CONTENT_URI,
					null,
					ContactsContract.CommonDataKinds.Email.CONTACT_ID + "="
							+ contactId, null, null);
			// 遍历查询结果,获取多个联系人的email
			while (emails.moveToNext()) {
				String emailAddress = emails
						.getString(emails
								.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
				detail.add("邮件地址:" + emailAddress);
			}
			emails.close();
			details.add(detail);
		}
		cursor.close();
		// 加载result.xml界面布局代表的试图
		View resultDialog = getLayoutInflater().inflate(R.layout.result, null);
		// 获取加载视图上的id
		ExpandableListView list = (ExpandableListView) resultDialog
				.findViewById(R.id.expandableListView1);
		// 获取视图当中的ExpandableListView对象
		BaseExpandableListAdapter adapter = new BaseExpandableListAdapter() {

			// 自定义的得到TextView的方法
			private TextView getTextView() {
				AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
						ViewGroup.LayoutParams.FILL_PARENT, 64);
				TextView textView = new TextView(MainActivity.this);
				textView.setLayoutParams(lp);
				textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
				textView.setPadding(36, 0, 0, 0);
				textView.setTextSize(20);
				textView.setTextColor(Color.RED);
				return textView;
			}

			// 子选项是否被选中
			public boolean isChildSelectable(int groupPosition,
					int childPosition) {
				// TODO Auto-generated method stub
				return true;
			}

			// 是否有固定的id
			public boolean hasStableIds() {
				// TODO Auto-generated method stub
				return true;
			}

			// 该方法决定每个组选项的外观,返回的是自定义的TextView
			public View getGroupView(int groupPosition, boolean isExpanded,
					View convertView, ViewGroup parent) {
				// TODO Auto-generated method stub
				TextView textView = getTextView();
				textView.setText(getGroup(groupPosition).toString());
				return textView;
			}

			// 得到组的id号
			public long getGroupId(int groupPosition) {
				// TODO Auto-generated method stub
				return groupPosition;
			}

			// 得到组的个数
			public int getGroupCount() {
				// TODO Auto-generated method stub
				return names.size();
			}

			// 得到组
			public Object getGroup(int groupPosition) {
				// TODO Auto-generated method stub
				return names.get(groupPosition);
			}

			// 得到组的二级列表的个数
			public int getChildrenCount(int groupPosition) {
				// TODO Auto-generated method stub
				return details.get(groupPosition).size();
			}

			// 得到组的二级列表视图
			public View getChildView(int groupPosition, int childPosition,
					boolean isLastChild, View convertView, ViewGroup parent) {
				// TODO Auto-generated method stub
				TextView textView = getTextView();
				textView.setText(getChild(groupPosition, childPosition)
						.toString());
				return textView;
			}

			// 得到组的二级列表的id号
			public long getChildId(int groupPosition, int childPosition) {
				// TODO Auto-generated method stub
				return childPosition;
			}

			// 得到组的二级列表中的一个元素
			public Object getChild(int groupPosition, int childPosition) {
				// TODO Auto-generated method stub
				return details.get(groupPosition).get(childPosition);
			}
		};
		list.setAdapter(adapter);

		new AlertDialog.Builder(MainActivity.this).setView(resultDialog)
				.setPositiveButton("确定", null).show();
	}

}

main.xml布局文件只有一个按钮

<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" >

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:text="所有人信息" />

</RelativeLayout>

result.xml布局文件如下

<LinearLayout 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:orientation="vertical" >

    <ExpandableListView
        android:id="@+id/expandableListView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ExpandableListView>

</LinearLayout>

重要的权限问题哈

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />

抱歉!评论已关闭.