获取手机通讯录联系人(包含模糊查询,dialog自定义,也有一个自定义通知栏)

这里还有一个联系人类:

package com.example.sendmsg;

import android.graphics.Bitmap;

public class ContactEntity {

    /** 联系人名称 **/
    private String name;
    /** 联系人号码 **/
    private String number;
    /** 联系人头像 **/
    private Bitmap photo;

    public ContactEntity(String name, String number, Bitmap photo) {
        super();
        this.name = name;
        this.number = number;
        this.photo = photo;
    }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getNumber() {
        return number;
    }
    public void setNumber(String number) {
        this.number = number;
    }
    public Bitmap getPhoto() {
        return photo;
    }
    public void setPhoto(Bitmap photo) {
        this.photo = photo;
    }



}

代码如下:

//获取手机联系人(全部)
    public ArrayList<Birthday> getPhone(){
        ArrayList<Birthday> person = new ArrayList<Birthday>();
        final String[] PHONES_PROJECTION = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER };

        /** 联系人显示名称 **/
        final int PHONES_DISPLAY_NAME_INDEX = 0;

        /** 电话号码 **/
        final int PHONES_NUMBER_INDEX = 1;

        ContentResolver resolver = context.getContentResolver();
        Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);
        while (phoneCursor.moveToNext()){
            // 得到手机号码
            String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
            // 当手机号码为空的或者为空字段 跳过当前循环
            if (TextUtils.isEmpty(phoneNumber))
                continue;
            // 得到联系人名称
            String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);

            Birthday birth = new Birthday();
            birth.setName(contactName);
            birth.setPhone_number(phoneNumber);
            person.add(birth);
        }

        return person;
    }

//模糊查询联系人
public ArrayList<Birthday> getPhone_num(String name){

        ArrayList<Birthday> person = new ArrayList<Birthday>();
        final String[] PHONES_PROJECTION = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER };

        /** 联系人显示名称 **/
        final int PHONES_DISPLAY_NAME_INDEX = 0;

        /** 电话号码 **/
        final int PHONES_NUMBER_INDEX = 1;

        ContentResolver resolver = context.getContentResolver();

        Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION,Phone.DISPLAY_NAME+" LIKE ? ",new String[] { "%" + name + "%" }, null);//模糊查询

        while (phoneCursor.moveToNext()){
            // 得到手机号码
            String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
            // 当手机号码为空的或者为空字段 跳过当前循环
            if (TextUtils.isEmpty(phoneNumber))
                continue;
            // 得到联系人名称
            String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);

            Birthday birth = new Birthday();
            birth.setName(contactName);
            birth.setPhone_number(phoneNumber);
            person.add(birth);
        }
        return person;
    }

全部多是ArrayList我是为了我的ListView 显示的。

这里有个全部代码,可以获得联系人 头像名称 手机号码:(也包含了一个dialog可以忽略不看)

package com.example.sendmsg;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.zip.Inflater;

import android.annotation.SuppressLint;
import android.annotation.TargetApi;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class PersonListActivity extends Activity{

    private ListView personlistview;
    private Builder builder;
    private ImageView main_image;
    private TextView title;
    /** 联系人名称 **/
    private ArrayList<ContactEntity> mContacts = new ArrayList<ContactEntity>();

    /** 联系人,手机号码,头像 **/
    private static final String[] PHONES_PROJECTION = new String[] {Phone.DISPLAY_NAME, Phone.NUMBER, Phone.PHOTO_ID, Phone.CONTACT_ID};

    /** 联系人显示名称 **/
    private static final int PHONES_DISPLAY_NAME_INDEX = 0;

    /** 电话号码 **/
    private static final int PHONES_NUMBER_INDEX = 1;

    /** 头像ID **/
    private static final int PHONES_PHOTO_ID_INDEX = 2;

    /** 联系人的ID **/
    private static final int PHONES_CONTACT_ID_INDEX = 3;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.personlist);
        init();
        getPhoneContacts();
        PersonListAdapter adapter = new PersonListAdapter(PersonListActivity.this, mContacts);
        personlistview.setAdapter(adapter);
        personlistview.setOnItemClickListener(new PersonListClick());

    }

    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
    @SuppressLint("NewApi")
    public void init(){
        personlistview = (ListView) findViewById(R.id.personlistview);
        main_image = (ImageView) findViewById(R.id.main_image);
        title = (TextView) findViewById(R.id.title);
        main_image.setOnClickListener(new BackOnclcik());

        ActionBar actionBar = getActionBar();  
        actionBar.hide();

        //定义一个AlertDialog.Builder对象  
        builder = new AlertDialog.Builder(this);  
    }

    private void getPhoneContacts(){
        ContentResolver resolver = getContentResolver();
        // 获取手机联系人
        Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);
        if (phoneCursor != null){
            while (phoneCursor.moveToNext()){
                // 得到手机号码
                String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);
                // 当手机号码为空的或者为空字段 跳过当前循环
                if (TextUtils.isEmpty(phoneNumber))
                    continue;
                // 得到联系人名称
                String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);
             // 得到联系人ID
                Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);
                // 得到联系人头像ID
                Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);
                // 得到联系人头像Bitamp
                Bitmap contactPhoto = null;
                // photoid 大于0 表示联系人有头像 如果没有给此人设置头像则给他一个默认的
                if (photoid > 0){
                    Uri uri = ContentUris.withAppendedId(
                            ContactsContract.Contacts.CONTENT_URI,contactid);
                    InputStream input = ContactsContract.Contacts
                            .openContactPhotoInputStream(resolver, uri);
                    contactPhoto = BitmapFactory.decodeStream(input);
                }else{
                    contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
                }
                ContactEntity mContact = new ContactEntity(contactName,phoneNumber, contactPhoto);
                mContacts.add(mContact);
            }
            phoneCursor.close();
        }

    }

    class PersonListClick implements OnItemClickListener{

        @Override
        public void onItemClick(AdapterView<?> arg0, final View arg1, int arg2,
                long arg3) {
            // TODO Auto-generated method stub
            //装载/res/layout/login.xml界面布局  
            LinearLayout loginForm = (LinearLayout)getLayoutInflater().inflate(R.layout.dialog,null);
            ImageView headimage = (ImageView) loginForm.findViewById(R.id.headimage);
            TextView personname = (TextView) loginForm.findViewById(R.id.personname);
            EditText msgcontent = (EditText) loginForm.findViewById(R.id.msg_text);
            LinearLayout button1 = (LinearLayout) loginForm.findViewById(R.id.button1);//取消
            LinearLayout button2 = (LinearLayout) loginForm.findViewById(R.id.button2);//确定
            //处理内容
            ImageView image = (ImageView) arg1.findViewById(R.id.personimage);
            Bitmap bm = ((BitmapDrawable)image.getDrawable()).getBitmap();  
            headimage.setImageBitmap(bm);

            TextView text = (TextView) arg1.findViewById(R.id.personname);
            String name = text.getText().toString();
            personname.setText(name);

            Intent intent = getIntent();
            final String context = intent.getStringExtra("context");
            msgcontent.setText(context);

            //按钮点击事件
            button1.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    finish();
                }
            });

            button2.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
                    // TODO Auto-generated method stub
                    TextView phone = (TextView) arg1.findViewById(R.id.personnumber);
                    String number = phone.getText().toString();
                    SmsManager manager = SmsManager.getDefault(); 
                    ArrayList<String> list = manager.divideMessage(context);  //因为一条短信有字数限制,因此要将长短信拆分  
                    for(String text:list){  
                        manager.sendTextMessage(number, null, text, null, null);  
                    }  
                    Toast.makeText(getApplicationContext(), "发送完毕", Toast.LENGTH_SHORT).show(); 

                }
            });

            // 设置对话框显示的View对象  
            builder.setView(loginForm);  

            //创建、并显示对话框  
            builder.create().show(); 

        }

    }

    class BackOnclcik implements OnClickListener{

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            finish();
        }

    }

}

xml文件:(ListView没有贴上去,大家可以自己写,这里只是一个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="match_parent"
    android:orientation="vertical"
    android:paddingLeft="10dp"  
    android:paddingTop="10dp"  
    android:paddingBottom="10dp"  
    android:paddingRight="10dp"  
    android:descendantFocusability="afterDescendants">

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        >

        <ImageView 
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:id="@+id/personimage"
            />

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:paddingLeft="5dp"
            android:orientation="vertical"
            >

            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:id="@+id/personname"
                android:textSize="18dp"
                />

            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:id="@+id/personnumber"
                android:textSize="18dp"
                />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

dialog也可以看看:(这是我写的自定义的对话框)

<?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="match_parent"
    android:padding="15dp"
    android:orientation="vertical"
    android:background="#ffffff" >

    <TextView 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/dialog_sendText"
        android:text="@string/dialog_send"
        android:paddingLeft="10dp"
        android:textSize="18dp"
        android:textStyle="bold"
        />

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingLeft="10dp"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        >

        <ImageView 
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:id="@+id/headimage"
            />

        <TextView 
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:gravity="center_vertical"
            android:paddingLeft="10dp"
            android:id="@+id/personname"
            android:textSize="18dp"
            />

    </LinearLayout>

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingTop="10dp"
        >

        <EditText 
            android:layout_width="fill_parent"  
            android:layout_height="wrap_content"
            android:id="@+id/msg_text"
            android:background="@drawable/bg_edittext"  
            android:padding="5dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"  
            android:textColorHint="#AAAAAA"  
            android:textSize="15dip"  
            android:singleLine="true"   
            android:inputType="textMultiLine"
            android:gravity="left|top"
            android:minLines="6"
            />

    </LinearLayout>

    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:paddingTop="15dp"
        android:divider="@drawable/layoutline"
        android:showDividers="middle"
        >

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:id="@+id/button1"
            android:background="@drawable/conner_"
            >

            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:id="@+id/text1"
                android:text="@string/quxiao"
                android:textSize="18dp"
                />

        </LinearLayout>

        <LinearLayout 
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:orientation="horizontal"
            android:id="@+id/button2"
            android:background="@drawable/conner_"
            >

            <TextView 
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:id="@+id/text2"
                android:text="@string/queding"
                android:textSize="18dp"
                />

        </LinearLayout>



    </LinearLayout>

</LinearLayout>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值