安卓获取手机联系人

来源:互联网 发布:淘宝二维码用微信打开 编辑:程序博客网 时间: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>




原创粉丝点击