关于获取手机通讯录小结

来源:互联网 发布:java中构造方法实例 编辑:程序博客网 时间:2024/05/22 13:15

关于获取手机通讯录小结

 

1.     获取手机通讯录信息

a.获取手机通讯录

Cursorcursor =context.getContentResolver().query(Phone.CONTENT_URI,null,null,null,null);

àpublic abstractContentResolvergetContentResolver()

Return aContentResolver instance for your application's package.

 

->ContentResolver

This classprovides applications access to the content model

这个类提供申请访问content模型


->Cursor

Thisinterface provides random read-write access to the result set returned by adatabase query

接口提供了随机读写访问数据查询结果集.

 

->public final Cursorquery(Uri uri,String[] projection, String selection, String[] selectionArgs, StringsortOrder)

Query the given URI, returning a Cursor over the result set.

 

b.获取联系人和号码

phoneNumber = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));phomeName = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));
 

c.添加手机通讯录权限

<uses-permission android:name="android.permission.GET_ACCOUNTS"/><uses-permission android:name="android.permission.WRITE_CONTACTS"/><uses-permission android:name="android.permission.READ_CONTACTS"/>
 
此处注意
如果targetSdkVersion >= 23 ,则需要动态申请权限,参考http://blog.csdn.net/u011200604/article/details/52874599
如果不打算动态申请权限,targetSdkVersion 最大只能设置22

 

2.     手机通讯录信息的封装

a.     创建一个类添加 name 和 number字段

b.     实现set和get方法

c.     封装

//创建 一个集合public static List<PhoneInfo> lists = new ArrayList<PhoneInfo>();
PhoneInfo phoneInfo = new PhoneInfo(phomeName, phoneNumber);lists.add(phoneInfo);
 

 

3.     手机通讯录UI的适配

a.ListView 控件需要传递adapter,自定义adapter继承自BaseAdapter 复写四个方法

getCount()
getItem(int i)
getItemId(int i)
getView(int i, View view, ViewGroup viewGroup)

 

b.实现xml布局

 

c.完成getView方法(实际上是参照4来写)

//获取当前加载的view
获取加载view的权限        LayoutInflater inflater = LayoutInflater.from(mContext);
通过Layout 对象进项加载        mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.cell, null);        TextView name = (TextView) mRelativeLayout.findViewById(R.id.name);        TextView number = (TextView) mRelativeLayout.findViewById(R.id.number);
将获取的内容添加进来        name.setText(lists.get(i).getName());        number.setText(lists.get(i).getNumber());

d.     在主函数中添加adapter

//        实例化Adapter        adapter = new MyAdapter(GetNumber.lists,this);//        绑定        lv.setAdapter(adapter);

 

4.     Android中ListView的优化

 

a.通过ViewHolder进行优化,创建一个静态的ViewHolder类,包括name 和number两个TextView。

 

b.在getView 中通过ViewHolder加载两个TextView对象

 

c. public void setTag(Object tag)

Added inAPI level 1

Sets the tag associated with this view. A tag can be usedto mark a view in its hierarchy and does not have to be unique within thehierarchy. Tags can also be used to store data within a view without resortingto another data structure.

view.setTag(holder);//储存标签

holder = (ViewHolder)view.getTag();//不在重新加载view,获取之前存储的view即可

 

 

@Override    public View getView(int i, View view, ViewGroup viewGroup) {/*        //获取当前加载的view//        获取加载view的权限        LayoutInflater inflater = LayoutInflater.from(mContext);//       通过 mLinearLayout 对对象进项加载        mRelativeLayout = (RelativeLayout) inflater.inflate(R.layout.cell, null);        TextView name = (TextView) mRelativeLayout.findViewById(R.id.name);        TextView number = (TextView) mRelativeLayout.findViewById(R.id.number);//        将获取的内容添加进来         name.setText(lists.get(i).getName());        number.setText(lists.get(i).getNumber());*/        ViewHolder holder;        if (view == null) {            view = LayoutInflater.from(mContext).inflate(R.layout.cell, null);            holder = new ViewHolder();            holder.name = (TextView) view.findViewById(R.id.name);            holder.number = (TextView) view.findViewById(R.id.number);            holder.name.setText(lists.get(i).getName());            holder.number.setText(lists.get(i).getNumber());            view.setTag(holder);//储存标签        } else {
            holder = (ViewHolder) view.getTag();//不在重新加载view,获取之前存储的view即可            holder.name.setText(lists.get(i).getName());            holder.number.setText(lists.get(i).getNumber());        }        return view;    }

 

                                             
0 0
原创粉丝点击