这里还有一个联系人类:
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>