android开发怎样获取通讯录联系人信息

作者&投稿:丘雯 (若有异议请与网页底部的电邮联系)
android开发怎样获取通讯录联系人信息~

在Android开发中,我经常会遇到需要获取手机通讯录联系人信息,Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息获取出来。
下面直接贴出代码供大家参考:
程序文件java代码:
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 ContactsActivity 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 mContactsName = new ArrayList();

/**联系人头像**/
private ArrayList mContactsNumber = new ArrayList();

/**联系人头像**/
private ArrayList mContactsPhonto = new ArrayList();

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 iamge = null;
TextView title = null;
TextView text = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.colorlist, null);
iamge = (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));
//绘制联系人头像
iamge.setImageBitmap(mContactsPhonto.get(position));
return convertView;
}

}
}

查询数据库,一般联系人的信息都存储在contacts2.db这个数据库中,你可以通过ContentProvider来查询,联系人的信息的表结构比较复杂,不知道你想要查询什么样的信息?

在Android开发中,我经常会遇到需要获取手机通讯录联系人信息,Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息获取出来。
下面直接贴出代码供大家参考:
程序文件java代码:
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 ContactsActivity 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 iamge = null;
TextView title = null;
TextView text = null;
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(
R.layout.colorlist, null);
iamge = (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));
//绘制联系人头像
iamge.setImageBitmap(mContactsPhonto.get(position));
return convertView;
}

}
}

百度一下,网上介绍的很多的


Android开发前景怎么样?
1、编程语言 众所周知,Android 开发是基于 Java 编程语言的,而 Java 作为老牌成熟的编程语言,虽然经常被人诟病,但是毫无疑问,Java是目前市场上最成熟、应用最广泛的编程语言,很多成熟的业务系统 Java 都是第一选择,每月的 TIOBE 编程语言排行榜Java一直稳坐榜首位置。所以从编程语言这个点来说,学习...

android系统开发怎么入门
开发android,我们需要哪些技能基础 ①Java基础知识 ②Linux基础知识 ③数据库基础知识 ④网络协议 ⑤Android基础知识 ⑥服务器端开发知识①Java基础知识很多朋友一上手就开始学习Android,似乎太着急了一些 Android应用程序开发是以Java语言为基础的,所以没有扎实的Java基础知识,只是机械的照抄别人的代码,是...

Android开发教程是怎样的?
参加Android开发培训的同学都会先了解Android开发教程是怎样的,下面介绍Android开发要学习并掌握的知识有:Java基础、Linux基础、数据库基础、网络协议、Android基础、服务器端开发等。北大青鸟http:\/\/www.kmbdqn.cn\/认为最重要的是最后的项目实训。Java基础 零基础自学的同学刚开始一定会觉得Android开发当然要...

自学Android开发怎么快速入门?
昌平镇北大青鸟自成立之日起,就以促进和发展移动互联网化为已任,专注进行昌平镇android培训和昌平镇ios培训。如今许多大学生都对Android和IOS等移动开发感兴趣,有自学的有进入像我们昌平镇北大青鸟这样的培训机构,今天就由昌平镇北大青鸟的老师来给基础薄弱的同学一点建议。自学Android开发怎么快速入门:首...

如何搭建 Android 开发环境?
Project”:10.当点击“New Project”项后,Android Studio将显示如下对应的应用程序名称、模块名、包名。而且可以指定编译应用程序的Android SDK版本和所支持的最低SDK版本,然后任选一个内置主题。11IDE会提示从可用的设备或模拟器列表中选择一个进行Android应用布署,完成了android的开发环境的所有步骤。

Android的开发技术
现在的Android程序不需要联网的已经不多了。所以网络编程也是必须的,一般的公司都会封装有自己的联网结构,但是基本的联网还是要熟悉。1)HTTP联网 使用Http联网Json数据格式是现在很多客户端的首选。2)Socket联网 至于蓝牙等连接方式则可以在项目需要的时候学习。其次,手机软件相关 Android开发不同于普通的...

Android软件开发主要是学习什么的?
至于服务和广播组件可以稍微缓一下,到实际使用的时候再学习都可以。2、界面开发技术 界面开发是一种基本的技术,几乎所有的程序里面都需要用到。在Android开发中界面开发分为3种:1)使用xml文件布局 使用xml首先对于界面进行布局,然后在Activity里面进行引用是最常见的应用软件开发技术,这种方式使用的最大...

Android应用的4种开发方式
Eclipse+ADT的开发方式是曾经Android开发者最好的选择,也是谷歌官方所支持的。但是2013的GoogleI\/O大会上,Google官方曝光一款新的开发工具AndroidStudio,并在2014年底正式推出自家的IDEAndroidStudio1.0,2016年11月2日,GoogleAndroidDeveloper官博发文,宣告停止对EclipseADT的支持。 由于现在市场上的书籍和视频教程,包括很多...

怎样才能开发一款成功的Android App
所以Android App开发者想要开发一款成功的app应用软件,那么就需要不断地完善app的开发方案,同时还需要不断地测试,这样可以提前发现问题解决问题,给用户留下更好的印象 三、优化UI设计 UI设计所包含的内容很多,有人机交互、操作逻辑、界面美观的整体设计,在设计的过程中设计师应遵循简易、灵活、人性化...

如何进行Android应用的开发
通过这些工具,最好能够做到运用Java语言进行编程。2.熟悉基本的HTML,XML和CSS知识在Android应用开发中,还需要掌握一些关于HTML,XML和CSS的基础知识。HTML用于创建静态界面;XML用于存储数据和定义用户界面;CSS用于美化Android应用的外观。这些知识点对于开发者来说是必须要掌握的,因为Android开发不仅仅是写...

长兴县13560072600: android开发怎样获取通讯录联系人信息 -
长孙宗吴天: 给你个方法~ //定义一个获取联系人的方法,返回的是List的数据 public List getContacts() { List Cont...

长兴县13560072600: 如何获取手机联系人并返回到调用页面 -
长孙宗吴天: 在Android开发中,我经常会遇到需要获取手机通讯录联系人信息,Android手机的通讯录联系人全部都存在系统的数据库中,如果须要获得通讯里联系人的信息就须要访问系统的数据库,才能将信息获取出来. 下面直接贴出代码供大家参考: 程序文件java代码...

长兴县13560072600: 联系人如何读取请求 -
长孙宗吴天: android开发获取通讯录联系人信息,主要是通过ContentResolver类提供的api,访问手机数据库中的联系人表,代表如下:private void getPhoneContacts() {ContentResolver resolver = this.getContentResolver();// 获取手机联系人...

长兴县13560072600: android 怎么通过js调用手机通讯录 -
长孙宗吴天: 思路:1、js调用android的java代码2、通过java代码访问通讯录3、通过java代码访问js代码返回通讯录信息代码:1、js调用android的java代码 js代码:window.ncp.callOnJs2("click"); android代码,通过webview打开页面:mWebview....

长兴县13560072600: android 编程中,知道联系人的姓名,怎么得到联系人的电话号码? -
长孙宗吴天: 你的联系人的信息存放在数据库中?如果时这样的话,可以用cursor,然后查询数据库where=联系人姓名的那一行数据,这样,这个联系人的所有信息就都查到了,然后显示你需要的就可以了

长兴县13560072600: 如何获取android手机联系人并按字母展示 -
长孙宗吴天: 有很多场景和需求你需要用到手机设备的唯一标识符.例如,略.在Android中,有以下几种方法获取这样的ID.1. The IMEI: 仅仅只对Android手机有效:TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY...

长兴县13560072600: android短信开发怎么读取联系人, -
长孙宗吴天: 短信就用最简单的不就行了.Uri uri=Uri.parse("sms:"+d);//实际上就是发件人地址 Intent it =new Intent (Intent.ACTION_SENDTO,uri); it.putExtra("sms_body","The sms text"); startActivity(it);设置好d,d就是你的联系人手机号码吧.然后你...

长兴县13560072600: android 如何查询最新添加的联系人 -
长孙宗吴天: 文是提供了3种方式查询通讯录,获取手机通讯录中所有联系人的ID和联系人姓名.通过ContentResolver类的query方法,这种方法在主线程中查询数据,query方法返回数据库的游标Cursor,需要自己去手动关闭.通过Activity类的managedQuery方法,这种方法查询同样是在主线程中,但是不需要手动关闭Cursor,因为Activity类销毁时再onDestroy方法中会去关闭.通过Android提供的异步查询框架AsyncQueryHandler,这个类是一个抽象类,提供异步查询,当查询完毕后,会调用onQueryComplete方法,该方法参数cursor是查询系统数据库完成后获得的游标.

长兴县13560072600: 如何调用android系统的contacts?
长孙宗吴天: 你是要获取通讯录中的联系人吗? 可以参考 http://www.eoeandroid.com/forum. ... 3&page=1

长兴县13560072600: Android开发如何获取手机号码 -
长孙宗吴天: //创建电话管理2activity.getSystemService(Context.TELEPHONY_SERVICE);//与手机建立连接3StringphoneId=tm.getLine1Number();//获取手机号码 记得在manifest file中添加访问权限1<uses-permission android:name="android....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网