关于获取手机通讯录小结

关于获取手机通讯录小结

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;
    }
 

猜你喜欢

转载自blog.csdn.net/Ghost_tal/article/details/69944941
今日推荐