您的位置:首页 > 其它

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

2016-09-03 14:14 405 查看
这里还有一个联系人类:

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  通讯录 dialog 手机