`
leiwuluan
  • 浏览: 694179 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

android 获取电话本中的联系人列表

 
阅读更多

首先这里介绍一下 获取思路。

第一种 : 直接查通讯录的数据库  

第二种 :设用通讯录的Activity 并返回所选择的数据。

 

 

先实现第二种吧。、第二种相对简单,易操作、

 

你要操作   手机中的通讯录,就要有权限 的操作。

android 内核linux

 

1、要在工程中 AndroidManifest.xml  文件中添加操作权限

    <!-- 读取联系人权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />

 

 

然后在你的activity 里面编写调用代码:

	Intent intent = new Intent();
        intent.setAction(Intent.ACTION_PICK);
        intent.setData(ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, REQUEST_CONTACT);

 

重写 Activity 的 onActivityResult 方法:

 

	//重写的结果返回方法
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
        case 1:
            if (data == null) {
                return;
            }
            Uri result = data.getData();
            String contactId = result.getLastPathSegment();
            
            String name = "";
            String phone = "";
            
            //得到名称
            String[] projection = new String[] { People._ID, People.NAME ,People.NUMBER};  
            Cursor cursor = getContentResolver().query(People.CONTENT_URI,     
            		projection, // select sentence    
            		People._ID + " = ?", // where sentence    
            		new String[] { contactId }, // where values    
            		People.NAME); // order by  
            
            if (cursor.moveToFirst()) {
                name = cursor.getString(cursor.getColumnIndex(People.NAME));
            }
            
            //得到 电话 
            projection = new String[] { Contacts.Phones.PERSON_ID, Contacts.Phones.NUMBER};  
            cursor = getContentResolver().query(Contacts.Phones.CONTENT_URI,     
            		projection, // select sentence    
            		Contacts.Phones.PERSON_ID + " = ?", // where sentence    
            		new String[] { contactId }, // where values    
            		Contacts.Phones.NAME); // order by  
            
            if (cursor.moveToFirst()) {
                phone = cursor.getString(cursor.getColumnIndex(Contacts.Phones.NUMBER));
            }
            
            //显示
            showPhone.setText(name+":"+phone);
            break;
		}
	}

 就可以得到你选择的 联系的信息了。

 

 

下面来看一下我的例子和载图吧。

 

1、添加操作权限 AndroidManifest.xml

    <!-- 读取联系人权限 -->
    <uses-permission android:name="android.permission.READ_CONTACTS" />

上面有载图自己看。

 

2、创建 layout   文件  get_phone_num.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center"
    android:orientation="vertical" >

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="clickFun"
        android:text="得到电话号码" />

    <TextView
        android:id="@+id/getPhoneNumTextId"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="电话号码" />

</LinearLayout>

 一个button 一个view

 

3、创建Activity 类 GetPhoneNumActivity.java

package com.main;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;

import com.main.db.FriendsDao;

public class AddUserActivity extends Activity {
	private EditText name;
	private EditText phoneNum;
	private EditText birthday;
	private String sexText;
	
	private FriendsDao friendsDao;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.add_user);
		
		//得到页面控件
		name=(EditText)findViewById(R.id.addUserTextName);
		phoneNum=(EditText)findViewById(R.id.addUserTextNum);
		birthday=(EditText)findViewById(R.id.addUserTextBirthday);
		RadioGroup sex=(RadioGroup)findViewById(R.id.addUserTextSex);
		sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
			@Override
			public void onCheckedChanged(RadioGroup group, int checkedId) {
				Log.d("test", "select radio " + sexText);
				sexText=((RadioButton)findViewById(checkedId)).getText().toString();
				Log.d("test", "select radio " + sexText);
			}
		});
		friendsDao=new FriendsDao(this,"ll1x.db",null,2);
	}
	
	public void addUserClick(View view){
		int viewId=view.getId();
		switch(viewId){
		case R.id.addUserOkBut://确定
			
			//验证
			String name=this.name.getText().toString();
			String phoneNum=this.phoneNum.getText().toString();
			String birthday=this.birthday.getText().toString();
			
			//提交 保存数据库
			friendsDao.insertData(name, phoneNum,birthday,sexText);
			Log.d("test", "addUserClick " + name+"|"+phoneNum+"|"+birthday+"|"+sexText.toString());
			break;
		case R.id.addUserNoBut://取消
			
			break;
		case R.id.addUserFromTXId:
			Intent intent = new Intent();
	        intent.setAction(Intent.ACTION_PICK);
	        intent.setData(ContactsContract.Contacts.CONTENT_URI);
	        startActivityForResult(intent, 1);
			break;
		}
	}
	
	//重写的结果返回方法
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
        case 1:
            if (data == null) {
                return;
            }
            Uri result = data.getData();
            String contactId = result.getLastPathSegment();
            
            String name = "";
            String phone = "";
            
            //得到名称
            String[] projection = new String[] { People._ID, People.NAME ,People.NUMBER};  
            Cursor cursor = getContentResolver().query(People.CONTENT_URI,     
            		projection, // select sentence    
            		People._ID + " = ?", // where sentence    
            		new String[] { contactId }, // where values    
            		People.NAME); // order by  
            
            if (cursor.moveToFirst()) {
                name = cursor.getString(cursor.getColumnIndex(People.NAME));
            }
            
            //得到 电话 
            projection = new String[] { Contacts.Phones.PERSON_ID, Contacts.Phones.NUMBER};  
            cursor = getContentResolver().query(Contacts.Phones.CONTENT_URI,     
            		projection, // select sentence    
            		Contacts.Phones.PERSON_ID + " = ?", // where sentence    
            		new String[] { contactId }, // where values    
            		Contacts.Phones.NAME); // order by  
            
            if (cursor.moveToFirst()) {
                phone = cursor.getString(cursor.getColumnIndex(Contacts.Phones.NUMBER));
            }
            
            //显示
            showPhone.setText(name+":"+phone);
            break;
		}
	}
}
 

 

运行载图:

 

 


 

 


 

 


 

 

 

 

资料:

 

http://hi.baidu.com/%C1%F5%D0%A1%C0%F61984519/blog/item/d58cc37b9aa1daf32e73b3ae.html

 

http://blog.sina.com.cn/s/blog_60a94ae70100vfrm.html

 

 

Android 通讯录学习笔记之——调用系统添加成员功能

 

 

就到这里,不懂Call 我。

 

 

 

ok 就到这里、

 

 

做了一下修改:

Phone 改成了 PhoneLookup

 


 

 

 

 

  • 大小: 44.2 KB
  • 大小: 8.3 KB
  • 大小: 54.1 KB
  • 大小: 9.1 KB
  • 大小: 27.9 KB
1
0
分享到:
评论
1 楼 NN_iaoiao 2015-05-29  
问一下 你的这个People 类 是自定义的还是android.provider.Contacts.People类  如果是自定义的 能发我People类一下吗  邮箱:cshangdic@163.com  谢谢了

相关推荐

    Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    主要介绍了Android获取手机通讯录、sim卡联系人及调用拨号界面方法,本文分别给出实现代码实现获取通讯录和sim卡的联系人,以及权限配置和调用系统拨打电话的界面的实现代码,需要的朋友可以参考下

    android2.2获取本机号码,获取本机联系人信息并拨打电话

    用于android2.2 用eclipse调试,获取本机号码的话,非移动用户可以获得,移动用户获取不到,可以获取本机联系人信息,并拨打其电话

    Android电话本和拨号

    实现了获取手机里联系人数据功能 及 获取电话本 显示出所有联系人的姓名和电话 点击一个联系人信息 可以拨号

    android读取联系人信息,姓名,电话,头像

    通过contentprovider提供的uri查询手机电话簿的联系人信息,包括姓名,电话,头像(获取的是本机保存的联系人信息,没有获取SIM卡里面联系人的信息)

    Android通过蓝牙使用Pbap协议读取通讯录

    附件中是通过蓝牙读取终端设备通讯录、通话记录等所需要的PBAP、Vcard、JavaOBEX源码文件,只需导入到相应的工程里即可使用。

    Android电话、短信、联系人相关操作源码合集

    所有的通话记录保存在contacts2.db数据库文件的calls表中,本代码将calls表中的电话号显示在ListView控件中。 (4)send_sms_activity通过系统程序发送短信 (5)send_sms通过SmsManager类直接发送短信 (6)save...

    Android实现获取联系人电话号码功能

    本篇文档主要记录一下获取联系人的电话号码的一种方式。 1、选择联系人 ............ //构造一个隐式的Intent,拉起联系人界面 final Intent pickIntent = new Intent(Intent.ACTION_PICK, ContactsContract....

    Android UI组件实例集合

    Google定义了一批intents(如:打电话啊,联系人清单上选择一个联系人,打开浏览器,电池更换的时候提供提示,等等。但是任何程序可以自由定义额外的intents和content-providers。我们可以很容易的联想到独立开发的...

    获取通话记录拨打电话发送短信

    android获取手机通话记录,实现电话拨打和短信发送

    新版Android开发教程.rar

    Android 进一步推进了 " 随时随地为每个人提供信息 " 这一企 业 目标的实现。 � Open Handset Alliance 汇集了多家业界巨头。运营商如: China Mobile 、 NTT DoCoMo 、 Vodafone 、 T-M obile 等;设备制造商如 ...

    《Google Android SDK开发范例大全(第3版)》.pdf

    6.3 群发拜年短信给联系人 309 6.4 开始与停止系统服务 312 6.5 通过短信发送e-mail通知 316 6.6 手机拨接状态 321 6.7 有来电,发送邮件通知 324 6.8 存储卡剩余多少容量 326 6.9 访问本机内存...

    Google Android SDK开发范例大全(第3版) 1/5

    完整的手机数据存取功能:铃声模式设置、震动控制、WiFi服务、屏幕旋转、电池计量、温度测量、电信网络信息、SIM卡信息、拨打电话、短信解析、通讯录联系人、电子罗盘、屏幕手写等手机控制功能。 系统服务及研发的...

    Android 攻破360手机卫士的短信拦截开机启动等服务.rar

    里面涉及到执行Root命令、获取Android开机启动列表、启用主Activity,开启开机自动运行、禁用360进程与服务、动态创建一个优先级最高的短信广播接收者、动态创建一个关机广播接收者。以下分别说明三者的实现:  短信...

    疯狂Android讲义源码

     联系人 355  9.2.2 使用ContentProvider管理  多媒体内容 360  9.3 实现ContentProvider 364  9.3.1 创建ContentProvider的步骤 364  9.4 监听ContentProvider的数据  改变 370  9.4.1 ContentObserver简介...

    Google Android SDK开发范例大全(第3版) 4/5

    完整的手机数据存取功能:铃声模式设置、震动控制、WiFi服务、屏幕旋转、电池计量、温度测量、电信网络信息、SIM卡信息、拨打电话、短信解析、通讯录联系人、电子罗盘、屏幕手写等手机控制功能。 系统服务及研发的...

    Google Android SDK开发范例大全(第3版) 3/5

    完整的手机数据存取功能:铃声模式设置、震动控制、WiFi服务、屏幕旋转、电池计量、温度测量、电信网络信息、SIM卡信息、拨打电话、短信解析、通讯录联系人、电子罗盘、屏幕手写等手机控制功能。 系统服务及研发的...

    Google Android SDK开发范例大全(第3版) 5/5

    完整的手机数据存取功能:铃声模式设置、震动控制、WiFi服务、屏幕旋转、电池计量、温度测量、电信网络信息、SIM卡信息、拨打电话、短信解析、通讯录联系人、电子罗盘、屏幕手写等手机控制功能。 系统服务及研发的...

Global site tag (gtag.js) - Google Analytics