导航:首页 > 操作系统 > android调用系统通讯录

android调用系统通讯录

发布时间:2022-08-06 19:40:14

1. android手机通讯录以及通话记录在哪个文件夹

在内部存储卡的的data/com.android.provides.contacts里面。

以三星的s8为例

找到通讯录以及通话记录方法:

1、打开三星的s8手机,在系统界面找到“我的文件”。

2. android 取通讯录中的吗

使用ContentResolver 管理联系人:
(一)、 使用ContentResolver 操作数据的步骤:
1、调用Context的getContentResolver()方法获得ContentResolver 对象;
2、调用使用ContentResolver 的insert()、delete()、update()、query()方法操作数据。
Uri insert(Uri uri, ContentValues values)
int delete(Uri uri, String where, String[] whereArgs)
int update(Uri uri, ContentValues values, String where, String[] whereArgs)

Cursor query(Uri uri, String[] projection, String where, String[] whereArgs, String sortOrder)
参数解释:
String where:表示带有占位符的where子句组成的字符串;
String[] whereArgs:表示替换where参数中占位符后的数据组成的字符串数组;
String sortOrder:表示select语句中的order by子句组成的字符串;
String[] projection:表示select语句中需要查询的所有的字段组成的字符串数组。
ContentValues values:是由数据库中表字段和往该字段中放置的数据所组成的键值对对象。
【备注:】以上四个方法的参数分别是2、3、4、5个。

(二)、 联系人管理中ContentProvider的几个Uri:
1、联系人的Uri==> content://com.android.contacts/contacts 和 content://com.android.contacts/raw_contacts
2、电话号码的Uri==> content://com.android.contacts/data/phones
3、EMAIL的URI==> content://com.android.contacts/data/emails

不过为了方便记忆,系统中提供了以下常量来替代以上的Uri字符串。
Uri CONTACTS_URI = ContactsContract.Contacts.CONTENT_URI;
Uri PHONE_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
Uri EMAIL_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI;

(三)、示例代码1——查看通讯录中的联系人姓名、id、电话、Email等信息:

publicstatic List<Map<String, Object>> selectContactsMsg(
ContentResolver resolver, ContentValues values) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
String uri_contacts = "content://com.android.contacts/raw_contacts";
String uri_contacts_phones = "content://com.android.contacts/data/phones";
String uri_contacts_emails = "content://com.android.contacts/data/emails";
// 从raw_contacts表中或许联系人的id和联系人的姓名。
Cursor cursor_contacts = resolver.query(Uri.parse(uri_contacts),
new String[] { "_id", "display_name" }, null, null, null);

// 遍历所有的联系人的信息
while (cursor_contacts.moveToNext()) {
int contacts_id = cursor_contacts.getInt(cursor_contacts
.getColumnIndex("_id"));
String display_name = cursor_contacts.getString(cursor_contacts
.getColumnIndex("display_name"));

Map<String, Object> map = new HashMap<String, Object>();
map.put("id", contacts_id);
map.put("display_name", display_name);

// 以下开始获取电话号码
// 根据每个联系人的id再去data表中查找相应的电话号码。
Cursor cursor_phones = resolver.query(
Uri.parse(uri_contacts_phones), new String[] {
"raw_contact_id", "data1" }, "raw_contact_id=?",
new String[] { contacts_id + "" }, null);

// 因为电话号码可能是多个,所以需要再遍历,组合在一起形成一个电话号码的字符串,放到StringBuilder中
StringBuilder sb = new StringBuilder();
while (cursor_phones.moveToNext()) {
sb.append(cursor_phones.getString(1));
sb.append(" | ");
}
// 将生成的电话号码放到map集合中
map.put("phones", sb.toString());

// 以下开始或许Email信息
Cursor cursor_emails = resolver.query(
Uri.parse(uri_contacts_emails), new String[] {
"raw_contact_id", "data1" }, "raw_contact_id=?",
new String[] { contacts_id + "" }, null);
StringBuilder sb2 = new StringBuilder();
while (cursor_emails.moveToNext()) {
sb2.append(cursor_emails.getString(1));
sb2.append(" | ");
}
map.put("emails", sb2.toString());

// 将包含有id、联系人姓名、手机号码、emails的map放到list集合中
list.add(map);
}
return list;
}

3. 开发android APP的时候,不想自己写通讯录。 是否可以打开默认通讯录并返回选中一个或者多个联系

可以的,实例中就有了,就是“API DEMOS”,你看下VIEWS下的EXPANDABLE LISTS下的CURSOR(PEOPLE),他就是从你本机的通讯录中读取。

4. 如何调用android通讯录

这个过程有三步:
1)许可向你的应用程序的manifest中添加读取通讯录数据的许可
<uses-permission android:name="android.permission.READ_CONTACTS"/

2)调用Contact Picker
在你的activity中,创建一个Intent,用来请求系统查找一个能够执行一个从Contacts URI的项目中发出的PICK动作的activity,
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
调用startActivityForResult在Intent中传递(和一个整数的请求代码,在这个例子中是PICK CONTACT )。这将导致android启动一个已经被等级的activity,用来支持在People.CONTENT URI上的ACTION_PICK ,然后当按下选择(或者取消)的时候返回到这个activity。startActivityForResult(intent, PICK_CONTACT);

3)仍然在你的activity中,重写onActivityResul方法来监听在你的第二个步骤中启动的activi'select a contact' activity的回调。你应该检查反馈的请求代码是否匹配你的期望值,结果代码是否是 RESULT_OK。
通过在数据Intent参数中调用getData()你可以获得选择的联系人的URI。为了获得选择的联系人的名字你需要使用URI从返回的游标中创建一个新的查询和提取的参数。
@Overridepublic void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));}}break;}}

5. 如何制作android手机通讯录

这个涉及到java还有安卓调用接口权限以及liunx的东西,不适合你这新手去搞。

跟备份通信录一样打开联系人。

按菜单键调出通信录编辑菜单。在这一步之前要把先前导出的通信录文件放到内置SD卡中

选择:从SD卡导入。

系统开始自动寻找内置SD卡中的vcf格式的通信录文件。

系统找到以后,会弹出一个选择窗口(如果有多个通信录备份文件),为了不出现差错,选择“导入电子名片文件”。

我的SD卡中有两个备份文件,这里就选择第一个就好了。选择好后点确定。

手机开始导入联系人,等进度条走完即可。

6. 求助VCF格式的名片文件,如何导入android系统的通讯录

用91手机助手试一试

7. android手机通讯录页面布局怎么做

基于android的通讯录的设计与实现

一:引言

学了android的开发与设计课后,对计算机软硬件相关知识有了一定的了解;基于此,设计与实现一个在Android系统上运行的手机通讯管理软件,实现手机通讯录的基本功能,包括:添加联系人、查看联系人、修改联系人、删除联系人、拨打电话、发送短信、查询联系人,以及联系人的导入导出功能即联系人的备份。

主要开发基于Android
的手机的通讯管理软件。以Java语言为基础,结合Android移动开发平台,并利用Android提供的SDK,实现在Android平台上运行的手机通讯录,方便广大手机用户更加便捷地对联系人的信息进行管理。该手机通讯录面向所有的Android手机用户,为他们提供更实际便捷的手机服务,具有拨号、通讯记录等基本功能。该通讯录的数据导出功能是该软件的一个特色,可以实现联系人数据导出到文本,实现数据备份。大家生活当中经常遇到手机丢失,出现故障,和其他一些事故。最担心的就是丢失手机里的电话号码。

1.1. 选题目的及意义

随着3G网络的使用,移动终端不再仅是通讯网络的终端,还将成为互联网的终端。因此,移动终端的应用软件和需要的服务将会有很大的发展空间。在Google和Android手机联盟的共同推动下,Android在众多手机操作系统中脱颖而出,受到广大消费者的欢迎。
手机通讯录作为手机的基本功能之一,每天我们都在频繁地使用着。根据手机功能使用调查显示,有八成以上的消费者使用手机通讯录功能。随着手机通讯录功能的不断加强与完善,手机通讯录对于人们的意义,已不仅仅像记事簿一样显示通讯地址,而是向着个性化、人性化的方向发展。通讯录从无到有,从英文到中文,经过了十几年的发展历程,今后的发展趋势就是从通讯录发展为名片夹,也就是在一个人名下,可以存储座机、手机、单位、地

址、电子邮件等内容。这种名片夹在电话薄的基础上,大大丰富了内容,同时结构也发生了革命性变化,而且随着手机的发展,相信更优秀的通讯录会越来越受到社会各层人士的喜爱。

1.2. 项目背景

Android一词的本义指"机器人",同时也是Google在2007年11月5日宣布的基于Linux内核的开源手机系统的名称,中文注册商标"安致",
该平台由操作系统、中间件、用户界面和应用软件组成,是一个为移动终端打造的真正开放和完整的智能手机系统。其早期为Google开发,后由开放手机联盟( Open
Handset Alliance)开发。它采用了软件堆层(software
stack,又名以软件叠层)的架构,主要分为三部分,底层以Linux内核为基础,由C语言开发,只提供基本功能;中间层包括数据库Library和虚拟机Virtual
Machine,由C++开发;最上层是由各公司自行开发,以Java编写的各种应用软件,如通话程序,短信程序等。 二:功能需求。

根据用户需求总结出来的反映了用户需求的系统逻辑模型转换成可以实施的物理模型,把整个设计划分成单元,主要解决如何去做的问题,要想创建整个通讯录首先要通过增加联系人信息来创建通讯录。整个应用程序应划分为4个模块,分别是程序启动、用户界面、后台服务和数据库适配器,各模块之间的关系如图所示:

从上图中不难看出,后台服务是整个应用程序的核心,主要是“数据获取模块”,负责周期性

的从用户输入的内容中获取信息。

后台服务在程序启动时就由AppWidgetProvider启动,也可由用户界面通过startService(进行启动,启动后的后台服务将一直保持运行状态。同时用户界面从数据获文本信息。一方面可以避免因网络通信不畅造成界面失去响应;另一方面,后台服务可以及时更新数据,以保证数据的准确性。数据库适配器封装了所有对SQLite数据库操作的方法用户界面和后台服务会调用它来实现数据库操作。在完成用户界面设计、数据库设计和模块设计后,至此程序设计阶段基本完成。文本编辑器中不同功能界面之间的切换,用户可以通过点击menu键来切换到不同的功能界面,不同功能界面的切换如图

三:设计思路。

开发的基于Android手机通讯录具有十分重要的意义。可以根据客户需求的实际情况,开发一款实用的手机通讯录软件。

本设计主要是采用Android的View框架编写,部分框架运用Android中的其他组件。
当进入通讯录的增加界面时,调用的是一个用相对布局RelativeLayout的XML布局文件。其中包括了2个Button,分别实现了不同的功能。

第一个Button是保存内容,当输入联系人姓名和号码是点击保存实现此功能。说到保存,不得不说得是保存信息涉及添加新联系人的头像,姓名,手机号码,办公室电话,家庭电话,职务职称,单位名称,地址,邮政编码,Email,其他联系方式,备注这些信息。

第二个Button是返回,顾名思义就是从增加界面返回前一界面。

响应menu键的触发事件,设置底部菜单是否可见,并通过对底部菜单选项的监听实现底部菜单中的增加、查找、删除、菜单、退出等功能,其中菜单包括显示所有、删除所有、号码备份功能。

在联系人信息界面时通过点击menu键,会弹出通信功能框,通过与发信息、打电话、发邮件功能接口的套用来实现。

四:流程图

一个好的系统设计的步骤决定了程序是否能按照设计者的目的按时完成,是否能在规定的时间内按照设计者的要求高质量的完成程序必要的功能。并且按照标准的设计步骤对程序进行调试,测试,以及后期的优化完善,使程序更加具有健壮性和可用性。通过对通讯录功能、系统模块、用户需求方面进行全方位的分析制定开发流程,开发流程如图4-1所示。

图4-1开发流程图

采用标准的开发流程确定系统具有用户管理功能,联系人增删改功能,通讯功能,查找功能,备份等功能。系统的功能图如4-2所示。

图4-2 系统功能图

通过对系统的功能结构的分析,设计后系统运行流程是系统运行后用户将进入通讯录主界面,可以看到联系人列表。通过点击MENU界面的增加功能选项可以新增联系人

8. Android调用系统通讯录获取联系人信息 出现崩溃

从第一个Activity跳转到第二个Activity
第二个Activity没有在Manifest.xml里注册

9. 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<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调用系统通讯录相关的资料

热点内容
华为怎么设置app时间锁 浏览:660
后宫app视频怎么下载 浏览:525
如何把图片转换从PDF格式 浏览:259
重写和重载的区别java 浏览:233
expressvpnandroid 浏览:84
储存卡被加密怎么解除 浏览:169
地球怎么压缩直径 浏览:780
金铲铲之战服务器爆满怎么进 浏览:160
同仁堂pdf 浏览:935
如何编译原理课程教材 浏览:730
单片机控制显示器 浏览:776
顶好花app下载怎么找不到 浏览:989
手机命令大全 浏览:808
怎么下邮政银行app 浏览:250
不背单词app单词怎么学习 浏览:481
程序员日常操作搞笑 浏览:382
android检查是否安装 浏览:375
苹果手机编辑pdf文件 浏览:460
android系统名字 浏览:971
安卓手机如何进去有求必应屋 浏览:434