安卓获取手机联系人
来源:互联网 发布:淘宝二维码用微信打开 编辑:程序博客网 时间:2024/05/17 05:56
里面带有增加联系人和点击删除联系人的方法
1.配置权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
主函数/** * 获取手机 联系人 并展示 * @author alice * */public class MainActivity extends AppCompatActivity { private Context mContext = MainActivity.this; private ListView listView; private TextView empty_tv; private ContentResolver resolver; private List<Map<String, String>> contacts = new ArrayList<Map<String, String>>(); private SimpleAdapter adapter; // raw_contacts 表的Uri private Uri rawContactsUri = ContactsContract.RawContacts.CONTENT_URI; // data 表的Uri private Uri dataUri = ContactsContract.Data.CONTENT_URI; // data表中的 phone 字段 private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; // data 表中的 email 字段 private Uri emailUri = ContactsContract.CommonDataKinds.Email.CONTENT_URI; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView); empty_tv = (TextView) findViewById(R.id.empty_tv); listView.setEmptyView(empty_tv); resolver = getContentResolver(); contacts.addAll(getContacts()); adapter = new SimpleAdapter(this, contacts, R.layout.item_layout, new String[] { "display_name", "phone", "email" }, new int[] { R.id.display_name_tv, R.id.phone_tv, R.id.email_tv }); listView.setAdapter(adapter); // 点击 删除 一条联系人数据 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int result = resolver.delete(rawContactsUri, "_id = ?", new String[] { contacts.get(position).get("rawId") }); if (result > 0) { contacts.remove(position); adapter.notifyDataSetChanged(); } } }); } // 获取联系人 private List<Map<String, String>> getContacts() { List<Map<String, String>> list = new ArrayList<Map<String, String>>(); Cursor rawCursor = resolver.query(rawContactsUri, new String[] { "_id", "display_name" }, null, null, null); if (rawCursor != null) { while (rawCursor.moveToNext()) { // 用来存储查询到的结果值 Map<String, String> map = new HashMap<String, String>(); String rawId = rawCursor.getString(0); String display_name = rawCursor.getString(1); map.put("rawId", rawId); map.put("display_name", display_name); // 根据 拿到的 rawId 查询data 表中的数据 // 获取电话号码 Cursor phoneCursor = resolver.query(phoneUri, new String[] { "data1" }, "raw_contact_id = ?", new String[] {rawId}, null); if (phoneCursor != null) { while (phoneCursor.moveToNext()) { String phone = phoneCursor.getString(0); map.put("phone", phone); } } phoneCursor.close(); // 查询 Email Cursor emailCursor = resolver.query(emailUri, new String[] { "data1" }, "raw_contact_id = ?", new String[] {rawId}, null); if (emailCursor != null) { while (emailCursor.moveToNext()) { String email = emailCursor.getString(0); map.put("email", email); } } emailCursor.close(); // 一次循环 代表一个联系人 list.add(map); } rawCursor.close(); } return list; } public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setIcon(R.mipmap.ic_launcher); builder.setTitle("警告"); builder.setMessage("你确定要添加这个联系人吗?"); View dialogView = View.inflate(mContext, R.layout.dialog_layout, null); builder.setView(dialogView); final EditText name_et = (EditText) dialogView.findViewById(R.id.name_et); final EditText phone_et = (EditText) dialogView.findViewById(R.id.phone_et); final EditText email_et = (EditText) dialogView.findViewById(R.id.email_et); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String name = name_et.getText().toString(); String phone = phone_et.getText().toString(); String email = email_et.getText().toString(); //添加联系人 addContact(name, phone, email); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } // 添加联系人 private void addContact(String name, String phone, String email) { // 先插入一条数据到 raw_contacts 表中 获取者跳数据的 Id ContentValues values = new ContentValues(); Uri uri = resolver.insert(rawContactsUri, values); long id = ContentUris.parseId(uri); // 插入name values.clear(); values.put("raw_contact_id", id); values.put("data1", name); values.put("mimetype", "vnd.android.cursor.item/name"); resolver.insert(dataUri, values); // 电话号码 values.clear(); values.put("raw_contact_id", id); values.put("data1", phone); values.put("mimetype", "vnd.android.cursor.item/phone_v2"); resolver.insert(dataUri, values); // email values.clear(); values.put("raw_contact_id", id); values.put("data1", email); values.put("mimetype", "vnd.android.cursor.item/email_v2"); resolver.insert(dataUri, values); // 刷新一下 contacts.clear(); contacts.addAll(getContacts()); adapter.notifyDataSetChanged(); }}
主布局<?xml version="1.0" encoding="utf-8"?><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" tools:context="alice.bw.com.day16contentprovider.MainActivity"> <Button android:id="@+id/addContact_bt" android:layout_width="match_parent" android:layout_height="wrap_content" android:onClick="onClick" android:text="添加联系人" /> <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/addContact_bt" > </ListView> <TextView android:id="@+id/empty_tv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/addContact_bt" android:layout_centerHorizontal="true" android:text="暂无数据" /></RelativeLayout>对话框布局<?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" > <EditText android:id="@+id/name_et" android:layout_width="match_parent" android:layout_height="wrap_content" > </EditText> <EditText android:id="@+id/phone_et" android:layout_width="match_parent" android:layout_height="wrap_content" /> <EditText android:id="@+id/email_et" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
item布局<?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" > <TextView android:id="@+id/display_name_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="TextView" android:textSize="18sp" /> <TextView android:id="@+id/phone_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="TextView" android:textSize="18sp" /> <TextView android:id="@+id/email_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp" android:text="TextView" android:textSize="18sp" /></LinearLayout>
阅读全文
0 0
- 安卓 获取手机联系人
- 安卓获取手机联系人
- 安卓获取手机上的联系人
- 安卓学习笔记之获取安卓手机联系人
- 安卓手机应用获取通讯录中的联系人
- 安桌获取手机联系人的电话与email
- 安卓获取联系人代码实例详解
- 安卓 ContentProvider(获取系统联系人)
- 获取手机联系人
- Android获取手机联系人
- 获取手机联系人
- Android 获取手机联系人
- 获取手机联系人
- Android 获取手机联系人
- 获取手机联系人信息
- 获取手机联系人
- 获取手机联系人信息
- 获取手机联系人
- poj2182之二分+树状数组
- 用事件委托减少Dom元素的事件绑定
- treegrid复选框选中
- 最小生成树之普里姆(prim)法求最小生成树
- 第三天 DIV+CSS布局实例
- 安卓获取手机联系人
- mysql可视化工具-navicat的下载和使用
- Hibernate关系映射级别注解(多对多单向外键关联、多对多双向外键关联)
- 2017.10.14一试
- 文本挖掘
- 1073. Scientific Notation (20)
- QNX程序的键盘输入与控制台输出
- python 求 牛顿插值法中的差商表
- 在使用RBO的情况下,出现两条或两条以上的执行路径的等级值相同的情况下,如何调整执行计划?