Contentprovider获取联系人id和姓名

package com.example.contentproviderdemo;

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

import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.database.Cursor;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {
    private ListView lv;
    private Cursor cu;
    private List<Map<String, Object>> list;
    private SimpleAdapter sa;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        // 查看所有联系人信息
        cu = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        //startManagingCursor(cu);
        list = new ArrayList<Map<String, Object>>();
        while (cu.moveToNext()) {
            Map<String, Object> map = new HashMap<String, Object>();
            // 取出指定名称的数据
            map.put("_id",
                    cu.getInt(cu.getColumnIndex(ContactsContract.Contacts._ID)));
            map.put("name", cu.getString(cu
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
            list.add(map);
        }
        sa = new SimpleAdapter(this, list, R.layout.item_lv, new String[] {
                "_id", "name" }, new int[] { R.id._id, R.id.name });
        lv.setAdapter(sa);
        // 注册上下文菜单
        registerForContextMenu(lv);
    }

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        // TODO Auto-generated method stub
        super.onCreateContextMenu(menu, v, menuInfo);
        menu.setHeaderTitle("手机联系人");
        menu.add(Menu.NONE, Menu.FIRST + 1, 1, "查看信息");
        menu.add(Menu.NONE, Menu.FIRST + 2, 2, "删除");
        

    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        // TODO Auto-generated method stub
        AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                .getMenuInfo();
        int postion = info.position;
        // 获取列表中的id
        long contractsId = Long.parseLong(list.get(postion).get("_id")
                .toString());
        switch (item.getItemId()) {
        case Menu.FIRST + 1:
            // 设置查询的条件 为按id查询
            String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                    + "=?";
            // 对条件的完善
            String[] phoneSelectArgs = { String.valueOf(contractsId) };
            Cursor c =super.getContentResolver().query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    phoneSelection, phoneSelectArgs, null);
            // 用sb对象来接收
            StringBuffer sb = new StringBuffer();
            sb.append("电话号码是");
            while (c.moveToNext()) {
                sb.append(
                        c.getString(c
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)))
                        .append(",");
            }
            Toast.makeText(MainActivity.this, sb, 0).show();

            break;

        case Menu.FIRST + 2:
            // 删除也是按id来删除
            getContentResolver().delete(Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI,
                    String.valueOf(contractsId)),null, null);
    
    //    getContentResolver().delete(url, where, selectionArgs)
            // 用list中移除
            list.remove(postion);
            // 更新adapter
            sa.notifyDataSetChanged();
            Toast.makeText(MainActivity.this, "数据已经删除", 0).show();
            break;
        }

        return false;
    }

}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="手机联系人" />

    <ListView
        android:id="@+id/lv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >
    </ListView>

</LinearLayout>
<?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="horizontal" >

    <TextView
        android:id="@+id/_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
     <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

 

package com.example.contentprovidertest;

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

import android.os.Bundle;
import android.provider.ContactsContract;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
    private ListView lv;
    private List<Map<String, Object>> list;
    private SimpleAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        lv = (ListView) findViewById(R.id.lv);
        ContentResolver resolver = getContentResolver();
        //获取姓名和id
        Cursor cursor = resolver.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        list = new ArrayList<Map<String, Object>>();
        //按id查询的条件
        String phoneSelection = ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                + "=?";
        while (cursor.moveToNext()) {
            Map<String, Object> map = new HashMap<String, Object>();
            //把name放进map里
            map.put("name", cursor.getString(cursor
                    .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
            //按id查询电话号
            Cursor cursor2 = resolver.query(
                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                    phoneSelection,
                    new String[] { String.valueOf(cursor.getInt(cursor
                            .getColumnIndex(ContactsContract.Contacts._ID))) },
                    null);
            while (cursor2.moveToNext()){
                //把电话号放进map里
                map.put("phone",
                        cursor2.getString(cursor2
                                .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)));
            }
            list.add(map);
        }
        adapter = new SimpleAdapter(this, list, R.layout.item_lv, new String[] {
                "name", "phone" }, new int[] { R.id.tv_name, R.id.tv_phone });
        lv.setAdapter(adapter);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

 读取联系人

private ArrayList<HashMap<String, String>> readContact() {
        // 首先,从raw_contacts中读取联系人的id("contact_id")
        // 其次, 根据contact_id从data表中查询出相应的电话号码和联系人名称
        // 然后,根据mimetype来区分哪个是联系人,哪个是电话号码
        Uri rawContactsUri = Uri
                .parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");

        ArrayList<HashMap<String, String>> list = new ArrayList<HashMap<String, String>>();

        // 从raw_contacts中读取联系人的id("contact_id")
        Cursor rawContactsCursor = getContentResolver().query(rawContactsUri,
                new String[] { "contact_id" }, null, null, null);
        if (rawContactsCursor != null) {
            while (rawContactsCursor.moveToNext()) {
                String contactId = rawContactsCursor.getString(0);
                // System.out.println(contactId);

                // 根据contact_id从data表中查询出相应的电话号码和联系人名称, 实际上查询的是视图view_data
                Cursor dataCursor = getContentResolver().query(dataUri,
                        new String[] { "data1", "mimetype" }, "contact_id=?",
                        new String[] { contactId }, null);

                if (dataCursor != null) {
                    HashMap<String, String> map = new HashMap<String, String>();
                    while (dataCursor.moveToNext()) {
                        String data1 = dataCursor.getString(0);
                        String mimetype = dataCursor.getString(1);
                        // System.out.println(contactId + ";" + data1 + ";"
                        // + mimetype);
                        if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {
                            map.put("phone", data1);
                        } else if ("vnd.android.cursor.item/name"
                                .equals(mimetype)) {
                            map.put("name", data1);
                        }
                    }

                    list.add(map);
                    dataCursor.close();
                }
            }

            rawContactsCursor.close();
        }

        return list;
    }

 

posted @ 2015-10-29 19:19  aaddrrooiidd  阅读(266)  评论(0编辑  收藏  举报