Android使用READ_CONTACTS读取手机联系人
实例代码:
package com.example.readcontacts;import java.io.InputStream; import java.util.ArrayList;import android.app.ListActivity; import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; 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.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener;public class MainActivity extends ListActivity {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 ArrayList<String> mContactsName = new ArrayList<String>();/** 联系人头像 **/ private ArrayList<String> mContactsNumber = new ArrayList<String>();/** 联系人头像 **/ private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();ListView mListView = null; MyListAdapter myAdapter = null;@Override public void onCreate(Bundle savedInstanceState) { mContext = this; mListView = this.getListView(); /** 得到手机通讯录联系人信息 **/ getPhoneContacts();myAdapter = new MyListAdapter(this); setListAdapter(myAdapter);mListView.setOnItemClickListener(new OnItemClickListener() {@Override public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { // 调用系统方法拨打电话 Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri .parse("tel:" + mContactsNumber.get(position))); startActivity(dialIntent); } });super.onCreate(savedInstanceState); }/** 得到手机通讯录联系人信息 **/ private void getPhoneContacts() { 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);// 得到联系人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.contact_photo); }mContactsName.add(contactName); mContactsNumber.add(phoneNumber); mContactsPhonto.add(contactPhoto); }phoneCursor.close(); } }/** 得到手机SIM卡联系人人信息 **/ private void getSIMContacts() { ContentResolver resolver = mContext.getContentResolver(); // 获取Sims卡联系人 Uri uri = Uri.parse("content://icc/adn"); Cursor phoneCursor = resolver.query(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);// Sim卡中没有联系人头像mContactsName.add(contactName); mContactsNumber.add(phoneNumber); }phoneCursor.close(); } }class MyListAdapter extends BaseAdapter { public MyListAdapter(Context context) { mContext = context; }public int getCount() { // 设置绘制数量 return mContactsName.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 image = null; TextView title = null; TextView text = null; if (convertView == null || position < mContactsNumber.size()) { convertView = LayoutInflater.from(mContext).inflate( R.layout.colorlist, null); image = (ImageView) convertView.findViewById(R.id.color_image); title = (TextView) convertView.findViewById(R.id.color_title); text = (TextView) convertView.findViewById(R.id.color_text); } // 绘制联系人名称 title.setText(mContactsName.get(position)); // 绘制联系人号码 text.setText(mContactsNumber.get(position)); // 绘制联系人头像 image.setImageBitmap(mContactsPhonto.get(position)); return convertView; }} }
注意:用户权限
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="ndroid.permission.CALL_PHONE" />
Android使用READ_CONTACTS读取手机联系人相关推荐
- Android程序如何读取手机联系人
导出手机联系人数据库,找到数据的存储结构 数据库位置: /data/data/com.android.providers.contacts/databases/contacts2.db 重要的三张表: ...
- java 添加手机联系人_Android编程实现读取手机联系人、拨号、发送短信及长按菜单操作方法实例小结...
本文实例讲述了Android编程实现读取手机联系人.拨号.发送短信及长按菜单操作方法.分享给大家供大家参考,具体如下: 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下 ...
- Android 保存号码至已有联系人,新建联系人,读取手机联系人
添加必要的权限 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> & ...
- 读取手机联系人简单方法(id,姓名,手机号)
<uses-permission android:name="android.permission.READ_CONTACTS"/> 布局文件 <?xml ver ...
- 读取手机联系人,并用listview显示
读取手机联系人,用到的就是一个contentprovider. 数据库里面有三张重要的表 raw_contact 里面有所有联系人的数据 data 每个联系人的所有数据 mime-type 每条数据的 ...
- java 获取手机联系人_Android 读取手机联系人、拨号、发送短信及长按菜单的操作...
本示例实现了读取手机联系人,拨号.发送短信及长按出现菜单选项的操作↓ 1.Andrid项目结构图↓主要操作图中红色方框内的文件. 2.首先布局代码如下↓ a, main.xml 程序运行的主界面,主要 ...
- Android内容提供者(读取手机联系人信息)
工程目录: Manifestes加入读取联系人权限 <uses-permission android:name="android.permission.READ_CONTACTS&qu ...
- Android项目——读取手机联系人信息
加入读取联系人信息的权限 <uses-permission android:name="android.permission.READ_CONTACTS"/> cont ...
- Android 批量插入删除手机联系人
找遍了网上,都没找到批量删除手机联系人好友的方法,有也效率特别低,删除200个人都要几十秒,反而批量添加联系人速度很快 批量插入联系人 public static boolean batchAddCo ...
最新文章
- springmvc4 ajax 406,Spring4 MVC 中,jQuery ajax (406 Not Acceptable)
- 数据结构:排序趟数 / 比较次数与序列的原始状态有关的排序方法有哪些?
- jboss7 java版本_jboss-as-7.1.1.Final与jdk1.8不兼容解决方案
- Linux篇:通配符的应用
- python小白从哪来开始-Python爬虫小白入门(一)写在前面
- nginx 负载均衡的五中不同配置方式
- 【紫书第十一章】图论模型与算法入门
- ubuntn安装qt5.12.10
- Talib技术因子详解(七)
- 与计算机相关的统计表格,统计信息化 Excel与SPSS应用pdf
- julia语言 python解释器_新一代科学计算语言Julia以及开发环境搭建教程
- 日常记账如何自定义设置收支类别及账户
- 找到一个数组对象中 '某某某(属性名)'为 ['某某','某某']的值
- 西门子三开接线图解_西门子三位单控开关怎么接线要开关实际图
- 采油厂污水选用流量计的类型建议
- Java开发手册(黄山版)
- Deep Learning × ECG (4) :利用卷积神经网络CNN对心律失常ECG数据进行分类
- 路未到尽头,而是该转弯了【转】
- ios越狱c语言编译器,Saigon Jailbreak越狱工具 IOS 10.2.1 支持win/mac
- iOS 优雅的处理网络数据,你真的会吗?不如看看这篇.
热门文章
- pool python 传参数_Python-爬虫-多线程、线程池模拟(urllib、requests、UserAgent、超时等)...
- 计算机技术大神,2017考研:计算机科学与技术学科大神给你的套路
- java 异常 最佳实践_关于JAVA异常处理的20个最佳实践
- c语言课程设计平时成绩,计算中心
- xcode开发php,xcode怎么编写c语言
- win10家庭版没有device guard_普通用户选择哪个Win10系统版本?家庭版与专业版的对比介绍...
- AD域机器如何指定时钟服务器,active-directory – 如何让我的域控制器与正确的外部时间源同步?...
- android 权限自动授权,Android判断是否某个权限是否授权
- java解析url字符串,将字符串解析为URL
- 《程序员面试金典》最大和子矩阵