`
iaiai
  • 浏览: 2197891 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android 获取联系人

阅读更多
在Android中,可以使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作。
在对联系人进行操作时需加入以下两个权限 
<!-- 添加操作联系人的权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

引用
<!-- 联系人相关的uri -->
content://com.android.contacts/contacts 操作的数据是联系人信息Uri
content://com.android.contacts/data/phones 联系人电话Uri
content://com.android.contacts/data/emails 联系人Email Uri 
         

main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    android:orientation="horizontal" android:layout_width="fill_parent"  
    android:layout_height="fill_parent">  
    <ListView android:layout_width="fill_parent"  
        android:layout_height="wrap_content" android:id="@+id/MyListView">  
    </ListView>  
</LinearLayout>  

list_items.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="wrap_content" android:id="@+id/myListItem"
	android:paddingBottom="5dip" android:paddingLeft="12dip"
	android:paddingRight="12dip">
	<ImageView android:id="@+id/img" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:layout_alignParentLeft="true"></ImageView>
	<TextView android:layout_height="wrap_content"
		android:layout_width="wrap_content" android:id="@+id/itemTitle"
		android:textSize="20dip" android:paddingTop="15px"
		android:layout_marginLeft="70px">
	</TextView>
	<CheckBox android:id="@+id/cb" android:layout_width="wrap_content"
		android:layout_height="wrap_content" android:layout_alignParentRight="true"
		android:focusable="false"></CheckBox>
</RelativeLayout>  

MyList.java类:
package iaiai.test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.DialogInterface;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class MyList extends Activity {

	private ListView list;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		list = (ListView) findViewById(R.id.MyListView);

		// 配置适配器
		MyCheckBoxAdapter adapter = new MyCheckBoxAdapter(this, getData()); // 布局里的控件id
		// 添加并且显示
		list.setAdapter(adapter);

		// 添加点击
		list.setOnItemClickListener(new OnItemClickListener() {
			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3) {
				setTitle("点击第" + arg2 + "个项目");
				Toast.makeText(MyList.this, "点击第" + arg2 + "个项目",
						Toast.LENGTH_LONG).show();
			}
		});

		// 添加长按点击
		list.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
			@Override
			public void onCreateContextMenu(ContextMenu menu, View v,
					ContextMenuInfo menuInfo) {
				// menu.setHeaderIcon(R.drawable.icon); //字义图片样式
				menu.setHeaderTitle("长按菜单选项:");
				menu.add(1, 0, 0, "编辑");
				menu.add(0, 1, 0, "删除");
			}
		});
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		int selectedPosition = ((AdapterContextMenuInfo) item.getMenuInfo()).position; // 刚才选择的
		Map<String, String> map = (HashMap) list
				.getItemAtPosition(selectedPosition); // ListView中的数据
		Toast.makeText(MyList.this,
				"你选择的:" + selectedPosition + ",内容为:" + map.get("itemTitle"),
				Toast.LENGTH_LONG).show(); // 显示那条数据

		String temp = "";
		switch (item.getItemId()) {
		case 0:
			temp = "编辑";
			break;
		case 1:
			temp = "删除";
			break;
		default:
			break;
		}
		// Toast.makeText(this, temp + "處理", Toast.LENGTH_LONG).show();
		return super.onContextItemSelected(item);
	}

	/**
	 * 获取联系人
	 * 
	 * @return
	 */
	private List<Map<String, String>> getData() {
		// 组织数据源
		List<Map<String, String>> mylist = new ArrayList<Map<String, String>>();

		ContentResolver contentResolver = getContentResolver();
		Uri uri = Uri.parse("content://com.android.contacts/contacts");
		Cursor cursor = contentResolver.query(uri, null, null, null, null);
		while (cursor.moveToNext()) {
			String id = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts._ID)); // id
			String name = cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); // 姓名

			Map<String, String> map = new HashMap<String, String>();
			map.put("id", id);
			map.put("name", name);
			mylist.add(map);
		}
		cursor.close(); // 关闭
		return mylist;
	}

	/**
	 * listview中点击按键弹出对话框
	 */
	public void showInfo() {
		new AlertDialog.Builder(this).setTitle("我的listview")
				.setMessage("介绍...")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
					}
				}).show();
	}
}

MyCheckBoxAdapter.java类:
package iaiai.test;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MyCheckBoxAdapter extends BaseAdapter {

	private LayoutInflater mInflater;

	private List<Map<String, String>> listData;

	private Map<Integer, Map<String, String>> selectMap = new HashMap<Integer, Map<String, String>>();

	private class ViewHolder {
		public ImageView img;
		public TextView title;
		public CheckBox checkBox;
	}

	public MyCheckBoxAdapter(Context context, List<Map<String, String>> listData) {
		this.mInflater = LayoutInflater.from(context);
		this.listData = listData;
	}

	@Override
	public int getCount() {
		return listData.size();
	}

	@Override
	public Object getItem(int position) {
		return listData.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}

	@Override
	public View getView(final int position, View convertView, ViewGroup parent) {
		ViewHolder holder = null;
		if (convertView == null) {
			holder = new ViewHolder();
			convertView = mInflater.inflate(R.layout.list_items, null);
			final View view = convertView;
			holder.img = (ImageView) convertView.findViewById(R.id.img);
			holder.title = (TextView) convertView.findViewById(R.id.itemTitle);
			holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);
			holder.checkBox.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					if (selectMap.get(position) != null) {
						selectMap.remove(position);
					} else {
						selectMap.put(position, listData.get(position));
					}
					Toast.makeText(view.getContext(),
							"你选择了:" + selectMap.size() + "个.",
							Toast.LENGTH_LONG).show();
				}
			});
			convertView.setTag(holder);
		} else {
			holder = (ViewHolder) convertView.getTag();
		}

		holder.img.setBackgroundResource(R.drawable.icon);
		holder.title.setText(listData.get(position).get("name"));

		if (selectMap.get(position) != null) {
			holder.checkBox.setChecked(true);
		} else {
			holder.checkBox.setChecked(false);
		}

		return convertView;
	}
}

运行结果:
  • 大小: 16.8 KB
分享到:
评论

相关推荐

    Android获取联系人

    以下是对"Android获取联系人"这一主题的详细讲解。 首先,Android系统中的联系人数据存储在SQLite数据库中,开发者可以通过ContentProvider接口访问这些数据。ContactsContract类是Android提供的一个内容提供者...

    Android获取联系人列表Demo

    在这个"Android获取联系人列表Demo"中,我们将深入探讨如何实现这一功能。 首先,我们需要在AndroidManifest.xml文件中添加必要的权限,因为访问联系人数据是受保护的隐私操作。以下是要添加的权限: ```xml ...

    android获取联系人生日信息

    以上就是Android获取联系人生日信息的基本步骤。在实际应用中,你可能还需要考虑到权限问题,因为自Android 6.0(API级别23)开始,用户需要在运行时授予读取联系人的权限。此外,为了提高性能,你还可以考虑使用...

    简单实用的Android获取联系人的源码

    全面的且简单Android获取联系人数据,并对联系人更新删除插入的源码

    Android 获取联系人 仿QQ通讯录

    在Android平台上,获取联系人数据是一项常见的功能,尤其在开发类似QQ通讯录的应用时,我们需要高效、安全地访问用户手机中的联系人信息。本篇将详细介绍如何在Android中实现这一功能,以及如何创建一个仿QQ通讯录的...

    android获取联系人名单

    在Android平台上,获取联系人名单是一项常见的功能,尤其在开发社交、通讯或者管理类应用程序时。这个过程涉及到Android系统的权限管理、Content Provider以及SQLite数据库的交互。本文将深入讲解如何在Android应用...

    Android获取联系人头像的方法

    在Android开发中,获取和展示...综上所述,Android获取联系人头像涉及到对ContactsContract API的熟练使用,包括查询、转换以及显示图像。在实际开发中,还需要关注性能优化和版本兼容性问题,以提供更好的用户体验。

    android调用通讯录获取联系人Demo

    在Android平台上,调用通讯录获取联系人是常见的功能,尤其在社交应用或者需要权限管理的应用中尤为关键。本Demo "android调用通讯录获取联系人Demo" 提供了一个实例,帮助开发者理解如何实现这一功能,允许用户自由...

    Androidの联系人群组Group操作

    通过查询`ContactsContract.Data`表,结合`ContactsContract.CommonDataKinds.GroupMembership`的数据类型,可以获取联系人所属的所有群组。 8. **权限管理** 记住,进行任何联系人操作都需要在AndroidManifest....

    Android 获取系统联系人并发送短信demo

    5. **处理数据**:在遍历过程中,可以通过getString()方法获取指定列的值,如获取联系人的名字和电话号码。 **发送短信** 发送短信涉及到使用SmsManager类。以下是如何发送短信的基本步骤: 1. **请求权限**:...

    Android获取联系人姓名和电话代码

    总的来说,Android获取联系人姓名和电话涉及到对`ContactsContract`内容提供者的查询,以及处理`Cursor`对象来获取数据。在用户界面上,我们通过监听按钮点击事件,动态地从联系人库中获取并显示联系人信息。这些...

    安卓获取联系人列表

    你可以通过阅读和分析这段代码来加深对Android获取联系人列表的理解。 总的来说,安卓获取联系人列表涉及到Android的Content Provider机制、Contacts Contract API以及Cursor的使用。掌握这部分知识对于开发任何...

    获取联系人信息进行查看

    在Android系统中,获取联系人信息是常见的应用场景,比如在社交应用、通讯录管理软件中。本教程将详细讲解如何通过电话号码获取联系人的头像、姓名和电话等信息,这些功能通常涉及到Android的Content Provider机制。...

    Android 获取通讯录联系人信息源码

    例如,获取联系人姓名和电话号码: ```java while (cursor.moveToNext()) { String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); long contactId = cursor....

    android 联系人 SIM卡 最近联系人 通讯录 获取源代码

    在Android开发中,获取联系人、SIM卡信息以及最近联系人列表是常见的需求。下面将详细解释这些概念和实现方式。 一、Android联系人管理 Android系统提供了ContentProvider接口来访问和操作联系人数据。主要涉及到...

    android获取联系人示例分享

    在Android平台上,获取联系人是常见的功能之一,用于展示用户手机中的联系人列表。下面将详细解释如何在Android应用中实现获取联系人的示例。 首先,为了能够访问用户的联系人数据,我们需要在`AndroidManifest.xml...

    Android调用通讯录 查询多选联系人 自动提示补全 发送信息

    要获取联系人列表,你需要请求`READ_CONTACTS`权限,并使用`ContentResolver.query()`方法查询`ContactsContract.CommonDataKinds.Phone`表,获取姓名和电话号码等信息。 2. **多选联系人**:当需要让用户选择多个...

    android 获取手机联系人

    在这个类中,你可以定义一个方法来请求联系人权限,并实现获取联系人的逻辑。以下是一个基本的示例: ```java public class ContactManager { public static final int REQUEST_READ_CONTACTS = 100; public ...

    Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    在Android平台上,获取手机通讯录和SIM卡联系人,以及调用拨号界面是常见的功能需求,这通常涉及到用户信息的读取和系统的交互。以下将详细解释如何实现这些功能。 首先,要获取手机通讯录的联系人信息,我们需要...

Global site tag (gtag.js) - Google Analytics