Android 自定义添加,查询联系人

添加联系人信息

public class AddContactActivity extends BaseActivity {

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

    public void addContact(View view){
        //1.获得联系人对外暴露的地址
        Uri uri = Uri.parse("content://com.android.contacts/raw_contact");
        //2.获得联系人对外暴露的数据地址
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        Cursor cursor = getContentResolver().query(dataUri, null, null, null, null);
        //3.为什么要移动到最后,因为添加数据都在最后添加
        cursor.moveToLast();
        long id = cursor.getLong(cursor.getColumnIndex("_id"));
        //4.每添加一条数据就产生一个新的id
        long newId = id + 1;
        ContentValues values = new  ContentValues();
        values.put("contact_id", newId);
        getContentResolver().insert(uri, values);


        //插入电话
        ContentValues pvalues = new ContentValues();
        pvalues.put("raw_contact_id", newId);
        pvalues.put("mimeType", "vnd.android.cursor.item/phone_v2");
        pvalues.put("data1", "88888888888");
        //插入邮件
        ContentValues evalues = new ContentValues();
        evalues.put("raw_contact_id", newId);
        evalues.put("mimeType", "vnd.android.cursor.item/email_v2");
        evalues.put("data1", "kk@tom.com");
        //插入名称
        ContentValues nvalues = new ContentValues();
        nvalues.put("raw_contact_id", newId);
        nvalues.put("mimeType", "vnd.android.cursor.item/name");
        nvalues.put("data1", "黎明");
        getContentResolver().insert(dataUri, nvalues);
    }
}

实体类

public class ContactInfo implements Parcelable {

    public String name;
    public String number;

    public ContactInfo(){}

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(number);
    }

    public static final Parcelable.Creator<ContactInfo> CREATOR = new Parcelable.Creator<ContactInfo>() {
        public ContactInfo createFromParcel(Parcel in) {
            return new ContactInfo(in);
        }

        public ContactInfo[] newArray(int size) {
            return new ContactInfo[size];
        }
    };

    private ContactInfo(Parcel in) {
        name = in.readString();
        number = in.readString();
    }
}

查询工具类

public class ContactService {

    public static List<ContactInfo> getContactInfos(Context context){
        List<ContactInfo> contactInfos = new ArrayList<ContactInfo>();
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        Cursor cursor = context.getContentResolver().query(uri, new String[]{"contact_id"}, null, null, null);
        while(cursor.moveToNext()){
            long contact_id = cursor.getLong(cursor.getColumnIndex("contact_id"));
            Cursor dataCursor = context.getContentResolver().query(dataUri, new String[]{"data1","mimeType"}, "raw_contact_id", new String[]{contact_id + ""}, null);
            while(dataCursor.moveToNext()){
                String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));
                String mimeType = dataCursor.getString(dataCursor.getColumnIndex("mimeType"));

                ContactInfo  info = new ContactInfo();
                if ("vnd.android.cursor.item/name".equals(mimeType)) {
                    info.name = data1;
                }else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) {
                    info.number = data1;
                }
                contactInfos.add(info);
            }
            dataCursor.close();
        }
        cursor.close();
        return contactInfos;
    }

}

查询联系人

public class QueryContactActivity extends BaseActivity {

    protected static final String CONTACTS = "contacts";
    protected static final int RESULTCODE = 0x00;
    private ListView mListView;
    private List<ContactInfo> mDatas;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_query_contact);
        initDatas();
        initViews();
        initEvents();
    }

    private void initEvents() {
        mListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(QueryContactActivity.this, GetContactActivity.class);
                //Bundle bundle = new Bundle();
                //bundle.putParcelable(CONTACTS, mDatas.get(position));
                intent.putExtra(CONTACTS, mDatas.get(position));
                setResult(RESULTCODE, intent);
                finish();
            }
        });
    }

    private void initViews() {
        mListView = (ListView) findViewById(R.id.listView1);
        mListView.setAdapter(new BasicAdapter<ContactInfo>(this, mDatas, R.layout.item_contact) {
            @Override
            public void fillView(ViewHolder holder, ContactInfo info) {
                TextView tvName = holder.getView(R.id.tv_name);
                tvName.setText(info.name);
                TextView tvNumber = holder.getView(R.id.tv_number);
                tvNumber.setText(info.number);
            }
        });     
    }

    private void initDatas() {
        mDatas = new ArrayList<ContactInfo>();
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri dataUri = Uri.parse("content://com.android.contacts/data");
        Cursor cursor = getContentResolver().query(uri, new String[]{"contact_id"}, null, null, null);
        while(cursor.moveToNext()){
            long contact_id = cursor.getLong(cursor.getColumnIndex("contact_id"));
            Cursor dataCursor = getContentResolver().query(dataUri, new String[]{"data1","mimeType"}, "raw_contact_id", new String[]{contact_id + ""}, null);
            while(dataCursor.moveToNext()){
                String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));
                String mimeType = dataCursor.getString(dataCursor.getColumnIndex("mimeType"));

                ContactInfo  info = new ContactInfo();
                if ("vnd.android.cursor.item/name".equals(mimeType)) {
                    info.name = data1;
                }else if ("vnd.android.cursor.item/phone_v2".equals(mimeType)) {
                    info.number = data1;
                }
                mDatas.add(info);
            }
            dataCursor.close();
        }
        cursor.close();

    }



}

点击后展示联系人信息

public class GetContactActivity extends Activity {
    private static final int REQUESTCODE = 0x11;
    private EditText mName;
    private EditText mNumber;

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

    private void initViews() {
        mName = (EditText) findViewById(R.id.editText1);
        mNumber = (EditText) findViewById(R.id.editText1);
    }

    public void queryContact(View view){
        Intent intent = new Intent(this, QueryContactActivity.class);
        startActivityForResult(intent, REQUESTCODE);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data != null) {

            //Bundle bundle = data.getExtras();
            //ContactInfo info = (ContactInfo) bundle.get(QueryContactActivity.CONTACTS);
            if (requestCode == REQUESTCODE && resultCode == QueryContactActivity.RESULTCODE) {
                ContactInfo info = data.getParcelableExtra(QueryContactActivity.CONTACTS);
                mName.setText(info.name);
                mNumber.setText(info.number);
            }
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lovoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值