android-内容访问者contentResolver

有内容提供者就有内容访问者,今天我研究了一下如何利用内容访问者获取联系人以及做了一个小小的展示,接下来个大家看


首先是xml上,直接放了一个ListView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.liuqian.android25_contentprovider.MainActivity">
    
    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/main_listview">
    </ListView>


</LinearLayout>


而新建一个main_item  这个xml一般用于写ListView的样式
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:orientation="vertical"
        >


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/main_item_text1"
            android:textSize="25dp"
            />
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/main_item_text2"
            android:textSize="18dp"
            android:paddingLeft="20dp"
            />


    </LinearLayout>


</LinearLayout>


接下来最主要的就是Java文件的代码了
先获取内容访问者,如何根据uri匹配器和content://协议,得到联系人信息 ,再取得名字和电话号码
最需要注意的就是一个联系人拥有多个号码,下面代码里我写了 ,往下看你就会明白了
package com.liuqian.android25_contentprovider;


import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Html;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


import com.liuqian.android25_contentprovider.entity.MainEntity;


import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {


    private ContentResolver contentResolver;
    private ListView main_listview;
    private ArrayList<MainEntity> mainEntities;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //获取内容访问者
        contentResolver = getContentResolver();
        //得到控件
        main_listview = (ListView) findViewById(R.id.main_listview);
        //new一个新的集合  用来存放需要展示的数据
        mainEntities = new ArrayList<>();
        getContacts();//自动获取联系人
//        Toast.makeText(this, ""+mainEntities.size(), Toast.LENGTH_SHORT).show();
        //设置适配器
        main_listview.setAdapter(new MyAdapter());
    }


    //获取联系人
    public void getContacts() {
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Cursor cursor = contentResolver.query(uri, null, null, null, null);
        int i=1;
        while (cursor.moveToNext()) {//当里面有数据时
            MainEntity mainEntity=new MainEntity();
            int id = cursor.getInt(cursor.getColumnIndex("_id"));//获得联系人id
            String name = cursor.getString(cursor.getColumnIndex("display_name"));//获得联系人名字
            Log.i("test", id + "   " + name);
            //根据id查询个人信息
            Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");
            Cursor cursor1 = contentResolver.query(uriData, null, null, null, null);
            String number="";
            while (cursor1.moveToNext()) {
                String data1 = cursor1.getString(cursor1.getColumnIndex("data1"));//查询电话号码,邮箱,名字等内容
                String type = cursor1.getString(cursor1.getColumnIndex("mimetype"));
                if("vnd.android.cursor.item/phone_v2".equals(type)){//只打印电话号码的判断
                    number+=data1+"<br>";//当有多个电话号码的拼接
                }
            }
            if(!TextUtils.isEmpty(name)&&!"".equals(number)){
                //我这里是当有这个re且有号码时才放入集合做展示
                mainEntity.setMname(name);
                mainEntity.setmTel(number);
                mainEntities.add(mainEntity);
            }
        }
    }


    /**
     * 结果电话号码可能含有“-”符号  如果不想要也可以
     */


    //适配器
    class MyAdapter extends BaseAdapter {


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


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


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


        @Override
        public View getView(int i, View view, ViewGroup viewGroup) {
            if(view==null){
                //R.layout.item_listview  把布局文件转成View
                view=getLayoutInflater().inflate(R.layout.main_item,null);


                main_item itemTag=new main_item();
                itemTag.main_text1= (TextView) view.findViewById(R.id.main_item_text1);
                itemTag.main_text2= (TextView) view.findViewById(R.id.main_item_text2);
                view.setTag(itemTag);
            }
            main_item it= (main_item) view.getTag();
            //设值
            it.main_text1.setText(mainEntities.get(i).getMname());
            it.main_text2.setText(Html.fromHtml(mainEntities.get(i).getmTel()));
            return view;
        }
    }


    class main_item{
        public TextView main_text1;
        public TextView main_text2;
    }


}
上面有一个适配器,是配合ListView用的。
这样联系人和他的电话号码就可以展示出来了,今天的分享就到此为止了,如有不足的地方请指正,谢谢!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值