Android 获取联系人

在Android中,可以使用ContentResolver对通信录中的数据进行添加、删除、修改和查询操作。
在对联系人进行操作时需加入以下两个权限  
Java代码
  1. <!-- 添加操作联系人的权限 -->
  2. <uses-permission android:name="android.permission.READ_CONTACTS" />
  3. <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布局文件:
Java代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="horizontal" android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent">  
  5.     <ListView android:layout_width="fill_parent"  
  6.         android:layout_height="wrap_content" android:id="@+id/MyListView">  
  7.     </ListView>  
  8. </LinearLayout>  
复制代码


list_items.xml布局文件:
Java代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.         android:orientation="vertical" android:layout_width="fill_parent"
  4.         android:layout_height="wrap_content" android:id="@+id/myListItem"
  5.         android:paddingBottom="5dip" android:paddingLeft="12dip"
  6.         android:paddingRight="12dip">
  7.         <ImageView android:id="@+id/img" android:layout_width="wrap_content"
  8.                 android:layout_height="wrap_content" android:layout_alignParentLeft="true"></ImageView>
  9.         <TextView android:layout_height="wrap_content"
  10.                 android:layout_width="wrap_content" android:id="@+id/itemTitle"
  11.                 android:textSize="20dip" android:paddingTop="15px"
  12.                 android:layout_marginLeft="70px">
  13.         </TextView>
  14.         <CheckBox android:id="@+id/cb" android:layout_width="wrap_content"
  15.                 android:layout_height="wrap_content" android:layout_alignParentRight="true"
  16.                 android:focusable="false"></CheckBox>
  17. </RelativeLayout>  
复制代码


MyList.java类:
Java代码
  1. package iaiai.test;

  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;

  6. import android.app.Activity;
  7. import android.app.AlertDialog;
  8. import android.content.ContentResolver;
  9. import android.content.DialogInterface;
  10. import android.database.Cursor;
  11. import android.net.Uri;
  12. import android.os.Bundle;
  13. import android.provider.ContactsContract;
  14. import android.view.ContextMenu;
  15. import android.view.ContextMenu.ContextMenuInfo;
  16. import android.view.MenuItem;
  17. import android.view.View;
  18. import android.view.View.OnCreateContextMenuListener;
  19. import android.widget.AdapterView;
  20. import android.widget.AdapterView.AdapterContextMenuInfo;
  21. import android.widget.AdapterView.OnItemClickListener;
  22. import android.widget.ListView;
  23. import android.widget.Toast;

  24. public class MyList extends Activity {

  25.         private ListView list;

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

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

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

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

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

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

  65.                 String temp = "";
  66.                 switch (item.getItemId()) {
  67.                 case 0:
  68.                         temp = "编辑";
  69.                         break;
  70.                 case 1:
  71.                         temp = "删除";
  72.                         break;
  73.                 default:
  74.                         break;
  75.                 }
  76.                 // Toast.makeText(this, temp + "處理", Toast.LENGTH_LONG).show();
  77.                 return super.onContextItemSelected(item);
  78.         }

  79.         /**
  80.          * 获取联系人
  81.          *
  82.          * @return
  83.          */
  84.         private List<Map<String, String>> getData() {
  85.                 // 组织数据源
  86.                 List<Map<String, String>> mylist = new ArrayList<Map<String, String>>();

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

  95.                         Map<String, String> map = new HashMap<String, String>();
  96.                         map.put("id", id);
  97.                         map.put("name", name);
  98.                         mylist.add(map);
  99.                 }
  100.                 cursor.close(); // 关闭
  101.                 return mylist;
  102.         }

  103.         /**
  104.          * listview中点击按键弹出对话框
  105.          */
  106.         public void showInfo() {
  107.                 new AlertDialog.Builder(this).setTitle("我的listview")
  108.                                 .setMessage("介绍...")
  109.                                 .setPositiveButton("确定", new DialogInterface.OnClickListener() {
  110.                                         @Override
  111.                                         public void onClick(DialogInterface dialog, int which) {
  112.                                         }
  113.                                 }).show();
  114.         }
  115. }

复制代码


MyCheckBoxAdapter.java类:
Java代码
  1. package iaiai.test;

  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;

  5. import android.content.Context;
  6. import android.view.LayoutInflater;
  7. import android.view.View;
  8. import android.view.View.OnClickListener;
  9. import android.view.ViewGroup;
  10. import android.widget.BaseAdapter;
  11. import android.widget.CheckBox;
  12. import android.widget.ImageView;
  13. import android.widget.TextView;
  14. import android.widget.Toast;

  15. public class MyCheckBoxAdapter extends BaseAdapter {

  16.         private LayoutInflater mInflater;

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

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

  19.         private class ViewHolder {
  20.                 public ImageView img;
  21.                 public TextView title;
  22.                 public CheckBox checkBox;
  23.         }

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

  28.         @Override
  29.         public int getCount() {
  30.                 return listData.size();
  31.         }

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

  36.         @Override
  37.         public long getItemId(int position) {
  38.                 return position;
  39.         }

  40.         @Override
  41.         public View getView(final int position, View convertView, ViewGroup parent) {
  42.                 ViewHolder holder = null;
  43.                 if (convertView == null) {
  44.                         holder = new ViewHolder();
  45.                         convertView = mInflater.inflate(R.layout.list_items, null);
  46.                         final View view = convertView;
  47.                         holder.img = (ImageView) convertView.findViewById(R.id.img);
  48.                         holder.title = (TextView) convertView.findViewById(R.id.itemTitle);
  49.                         holder.checkBox = (CheckBox) convertView.findViewById(R.id.cb);
  50.                         holder.checkBox.setOnClickListener(new OnClickListener() {
  51.                                 @Override
  52.                                 public void onClick(View v) {
  53.                                         if (selectMap.get(position) != null) {
  54.                                                 selectMap.remove(position);
  55.                                         } else {
  56.                                                 selectMap.put(position, listData.get(position));
  57.                                         }
  58.                                         Toast.makeText(view.getContext(),
  59.                                                         "你选择了:" + selectMap.size() + "个.",
  60.                                                         Toast.LENGTH_LONG).show();
  61.                                 }
  62.                         });
  63.                         convertView.setTag(holder);
  64.                 } else {
  65.                         holder = (ViewHolder) convertView.getTag();
  66.                 }

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

  69.                 if (selectMap.get(position) != null) {
  70.                         holder.checkBox.setChecked(true);
  71.                 } else {
  72.                         holder.checkBox.setChecked(false);
  73.                 }

  74.                 return convertView;
  75.         }
  76. }

复制代码


运行结果:
1.jpg
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值