Android 读取并显示通讯录
16lz
2021-01-23
1)创建Contact类代码如下
package com.example.androidapp;import android.graphics.Bitmap;public class Contact {/*姓名*/private String contactName;public void setContactName(String _contactName){this.contactName=_contactName;}public String getContactName(){return contactName;}/*电话号码*/private String contactNumber;public void setContactNumber(String _contactNumber){this.contactNumber=_contactNumber;}public String getContactNumber(){return contactNumber;}/*图片*/private Bitmap contactPhoto;public void setContactPhoto(Bitmap _contactPhoto){this.contactPhoto=_contactPhoto;}public Bitmap getContactPhoto(){return contactPhoto;}}
2)创建contactlist.xml作为自定义ListView的样式代码如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" > <ImageView android:id="@+id/contactPhoto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/contactName" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> <TextView android:id="@+id/contactNumber" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /></LinearLayout>
3)创建MyListAdapter.java作为自定ListAdapeter代码如下
package com.example.androidapp;import java.util.ArrayList;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;class MyListAdapter extends BaseAdapter {private ArrayList<Contact> contacts=null;private Context context=null;public MyListAdapter(ArrayList<Contact> _contacts,Context _context){this.contacts=_contacts;this.context=_context;} public int getCount() { //设置绘制数量 return contacts.size(); } @Override public boolean areAllItemsEnabled() { return false; } public Object getItem(int position) { return position; } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ImageView contactPhotoImageView = null; TextView contactNameTextView = null; TextView contactNumberTextView = null; if (convertView == null || position < contacts.size()) { convertView = LayoutInflater.from(context).inflate( R.layout.contactlist, null); contactPhotoImageView = (ImageView) convertView.findViewById(R.id.contactPhoto); contactNameTextView = (TextView) convertView.findViewById(R.id.contactName); contactNumberTextView = (TextView) convertView.findViewById(R.id.contactNumber); } //绘制联系人头像 contactPhotoImageView.setImageBitmap(contacts.get(position).getContactPhoto()); //绘制联系人名称 contactNameTextView.setText(contacts.get(position).getContactName()); //绘制联系人号码 contactNumberTextView.setText("("+contacts.get(position).getContactNumber()+")"); return convertView; } }4)修改MainActivity.java代码将自定ListAdapeter绑定给ListView代码如下
package com.example.androidapp;import java.io.InputStream;import java.util.ArrayList;import android.net.Uri;import android.os.Bundle;import android.provider.ContactsContract;import android.provider.ContactsContract.CommonDataKinds.Phone;import android.provider.ContactsContract.CommonDataKinds.Photo;import android.app.Activity;import android.content.ContentResolver;import android.content.ContentUris;import android.content.Context;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.text.TextUtils;import android.view.Menu;import android.widget.ListView;public class MainActivity extends Activity {Context mContext = null; /**获取库Phon表字段**/ private static final String[] PHONES_PROJECTION = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER, Photo.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; private ListView mListView = null; private MyListAdapter myAdapter=null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mContext = this; mListView=(ListView)findViewById(R.id.listView1);/**得到手机通讯录联系人信息**/ ArrayList<Contact> contacts=getPhoneContacts();myAdapter=new MyListAdapter(contacts,mContext);mListView.setAdapter(myAdapter);}/**得到手机通讯录联系人信息**/ private ArrayList<Contact> getPhoneContacts() { /**联系人**/ ArrayList<Contact> contacts=new ArrayList<Contact>(); ContentResolver resolver = mContext.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);//得到联系人IDLong contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);//得到联系人头像IDLong photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);//得到联系人头像BitampBitmap 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);}Contact contact=new Contact();contact.setContactName(contactName);contact.setContactNumber(phoneNumber);contact.setContactPhoto(contactPhoto);contacts.add(contact); } phoneCursor.close();}return contacts; }@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}}
5)最重要的是须要AndroidManifest.xml中 加入权限 否则代码会报错的。 千万别忘了。
<!-- 读取联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS"/>
更多相关文章
- Android代码实现飞行模式的打开
- Android对应用程序的资源文件xml解析的源代码在哪里
- android:软件的安装和卸载源代码
- 向Android社区贡献代码过程详解
- Android(Kotlin版本)MVC框架的实例以及代码
- 《疯狂Android讲义》第4版 代码
- 代码虚拟的[小代码]在Android和PHP之间的加密/解密,AES加密