android读取通讯录

第一步:注册权限

<uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.READ_CONTACTS" />

第二步:接收的model类

public class ContactModel {
    private String name;
    private ArrayList<String > list;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public ArrayList<String> getList() {
        return list;
    }

    public void setList(ArrayList<String> list) {
        this.list = list;
    }
}

第三步:mian——activity

public class MainActivity extends AppCompatActivity {

    private Button button;

    private ListView listView;

    static final String TAG = "MainActivity";

    ArrayList<ContactModel>dataList = new ArrayList<ContactModel>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView)findViewById(R.id.contrcts_view);
        readContacts();

        MainAdapter adapter = new MainAdapter(this,dataList);
        listView.setAdapter(adapter);
    }

    private void readContacts(){

            Cursor cursor = null;

           try {
               cursor = this.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                       null, null, null, null);

               int contactIdIndex = 0;
               int nameIndex = 0;

               if(cursor.getCount() > 0) {
                   contactIdIndex = cursor.getColumnIndex(ContactsContract.Contacts._ID);
                   nameIndex = cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
               }

               ContactModel model = null;

               while(cursor.moveToNext()) {

                   model = new ContactModel();

                   String contactId = cursor.getString(contactIdIndex);
                   String name = cursor.getString(nameIndex);
//                Log.i(TAG, contactId);
                   Log.i(TAG, "==============:" + name);

                   model.setName(name);

            /*
             * 查找该联系人的phone信息
             */
                   Cursor phones = this.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                           null,
                           ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + contactId,
                           null, null);
                   int phoneIndex = 0;
                   if (phones.getCount() > 0) {
                       phoneIndex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                   }
                   ArrayList <String>list = new ArrayList<String>();
                   while (phones.moveToNext()) {

                       String phoneNumber = phones.getString(phoneIndex);
                       Log.i(TAG, "==============:" + phoneNumber);
                       list.add(phoneNumber);
                   }

                   model.setList(list);

                   dataList.add(model);
               }

           }catch (Exception e){
               Log.e(TAG,e.toString());
           }finally {
               if(cursor != null){
                   cursor.close();
               }
           }

    }

}

第四步:adapter

public class MainAdapter extends BaseAdapter {

    private Context context;
    private List<ContactModel> list;

    public MainAdapter(Context context, List<ContactModel>list){
        this.context = context;
        this.list = list;
    }

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

    @Override
    public Object getItem(int i) {
        return this.list.get(i);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {

        ViewHolder holder;
        if(view == null){
            view = LayoutInflater.from(this.context).inflate(R.layout.item_main,null);
            holder = new ViewHolder();
            holder.nameTV = (TextView)view.findViewById(R.id.name);
            holder.phoneTV = (TextView)view.findViewById(R.id.phone);
            view.setTag(holder);
        }else{
            holder = (ViewHolder)view.getTag();
        }

        ContactModel model = this.list.get(i);
        holder.nameTV.setText(model.getName());

        StringBuffer buffer = new StringBuffer();

       for (int j=0;j<model.getList().size();j++){
           if(j==0){
               buffer.append(model.getList().get(j));
           }else {
               buffer.append("\n"+model.getList().get(j));
           }
       }
        holder.phoneTV.setText(buffer.toString());

        return view;
    }

    class  ViewHolder{
        TextView nameTV;
        TextView phoneTV;
    }
}

第五步: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="wrap_content"
    android:orientation="vertical">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="tom"
        android:layout_margin="5dp"
        android:id="@+id/name"/>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="18580633453"
        android:layout_margin="5dp"
        android:id="@+id/phone"/>
    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:background="#d6d6d6"
        />

</LinearLayout>

main的布局就一个listview,如果不会的话我需要静静了

时间: 2024-11-05 23:19:15

android读取通讯录的相关文章

android 读取通讯录显示到gridview

........... <GridView android:id="@+id/gridView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignLeft="@+id/button2" android:layout_below="@+id/button2" and

android 读取手机通讯录并显示listview

脉脉中注册时有一个,我已开启权限: 这个原理: 1.如果通讯录为空,脉脉就不让你往下进行, 2.如果没有开启权限,脉脉就不让你往下进行, 3.如果开启权限且通讯录为空,脉脉就不让你往下进行, 4.如果开启权限且通讯录不为空,脉脉才能让你往下进行. 读取通讯录权限 <!-- 读取联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS" /> <!-- 拨打电话权限 -

android中读取通讯录学习笔记

1.读取通讯录时一次读取时,尽量少读取所有属性,特别是列表展示的时候,会让你的列表加载速度变得难以忍受,建议先加载少量属性,然后在详情的时候加载所有属性. 2.在读取一类属性的时候,建议用一个游标,且放在循环外面,能明显加快速度,用projection(表示需要查询的列,在下面代码中是CONTACTOR_ION). 示例代码如下: private static final String[] CONTACTOR_ION = new String[]{ ContactsContract.Common

Android手机通讯录备份还原代码

实现方法很简单1.把通讯录中的联系人,电话号码保存到txt文件中完成备份.2.读取txt文件,导入到通讯录完成还原. 具体代码1.添加 通讯录读写权限,存储卡写权限 <uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission><uses-permission android:name="android.permission.WRITE_EXT

android 读取xml

在有些应用中,有一点小数据,直接存储在XML就是,实现较为简单, 1.xml文件放入asset文件夹,结构如: <?xml version="1.0" encoding="UTF-8" ?> <messages><message id="1"><title>3月毕业证数码像采集</title><date1>3</date1><content>3月12日

iOS通过app读取通讯录信息(整理)

iOS通过app读取通讯录信息,读取通讯录信息时需要加载AddressBookUI 和AddressBook两个包,并且引入头文件 #import <AddressBook/AddressBook.h> #import <AddressBookUI/AddressBookUI.h> 具体实现如下: -(void)readAllPeoples { //定义通讯录名字为addressbook ABAddressBookRef tmpAddressBook = nil; //根据系统版本

Android 读取工程内资源文件的两种方法

前言 欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net 雨季o莫忧离:http://blog.csdn.net/luckkof 正文 总结: asset目录下文件: 称为原生文件,这类文件在被打包成apk文件时是不会进行压缩的,不会自动生成R文件的ID 访问: 获取路径: file://android_asset/test.xml //工程根目录下的assets文件夹中存放,比如assets/test

Android使用通讯录的权限问题

06-02 11:49:53.676: E/AndroidRuntime(12974): FATAL EXCEPTION: main06-02 11:49:53.676: E/AndroidRuntime(12974): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.*****.Main}: java.lang.SecurityException: Permission Denial: reading

android 读取SQLite android could not open the database in read/write mode错误

由于AndroidManifest.xml文件中uses-permission没有设置权限问题 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permissio